Naar inhoud springen

Programmeren in ASP.net 2.0 N-Tier Tutorial/Berichtenbordfunctionaliteit

Uit Wikibooks

Programmeren in ASP.net 2.0 N-Tier Tutorial

Algemeen
  1. Visual Studio Solution
  2. Data-laag
  3. Common-laag
  4. Data Access-laag
  5. Business Services-laag
  6. Presentation-laag
  7. Berichtenbordfunctionaliteit

Nu zijn we al in staat om onze GridView op te vullen met berichtjes uit de database.

De volgende stap is het geheel iets functioneler te maken.
Door de structuur van onze Message-tabel kunnen we oneindig veel reacties geven op berichtjes.
We kunnen bijvoorbeeld de reacties op de berichtjes weergeven in een treeview.

Onthoud dat deze tutorial vooral bedoeld is om te tonen hoe je met een N-tier-structuur werkt, dus zal ik niet zoveel aandacht besteden aan functionaliteit en lay-out.

Design

[bewerken]
  1. Sleep een ASP Treeview vanuit de ToolBox naar de Designer Surface
  2. Plaats de TreeView boven de GridView
  3. Geef de Treeview de naam tvMessages

Query GetMessages aanpassen

[bewerken]

Ga naar de MessageDataAccessor en pas de query van GetMessages() aan.

string sql = "SELECT * FROM Message ORDER BY Posted ASC";

Zo worden de berichtjes direct al gesorteerd op de datum waarop ze toegevoegd werden.

TreeView opvullen

[bewerken]

Pas de code van Default.aspx.cs als volgt aan:

protected void Page_Load(object sender, EventArgs e)
{
	if (!this.IsPostBack)
	{
		FillTvMessages();
	}
}
private void FillTvMessages()
{
	MessageDataSet dsMessages = new MessageServices().GetMessages();
	
	foreach (MessageDataSet.MessageRow message in dsMessages.Message)
	{
		if (message.IsParentIdNull())
		{
			TreeNode parentNode = new TreeNode();
			parentNode.Text = message.Posted.ToString("dd/MM/yyyy HH:mm") + ": " + message.Title;
			parentNode.Value = message.Id.ToString();
			tvMessages.Nodes.Add(parentNode);
		}
		else
		{
			TreeNode parentNode = tvMessages.FindNode(message.ParentId.ToString());
			TreeNode childNode = new TreeNode();
			childNode.Text = message.Posted.ToString("dd/MM/yyyy HH:mm") + ": " + message.Title;
			childNode.Value = message.Id.ToString();
			parentNode.ChildNodes.Add(childNode);
		}
	}
}

Deze code zorgt ervoor dat de treeview opgevuld wordt en dat alle reply's onder hun Parent-bericht komen.
We overlopen ieder bericht. Als de ParentId van het bericht null is, dan is het een RootNode, een hoofdbericht.
Als de ParentId niet null is, dan zoeken we de ParentNode van dat bericht in de TreeView en voegen we het bericht toe als ChildNode.

Klikken op een TreeNode

[bewerken]

Wanneer we klikken op een TreeNode willen we natuurlijk de details van het bericht zien en alle reply's op dat bericht. Daarvoor moeten we een nieuwe Query maken om alle berichten op te halen voor dat hoofdbericht.

  1. Open MessageDataAccessor
  2. Voeg de volgende methode toe:
public MessageDataSet GetMessagesByParentId(int parentId)
{
	string sql = "SELECT * FROM Message WHERE ParentId = @ParentId OR ID = @ParentId ORDER BY Posted DESC";
	DbCommand cmd = Database.CreateSqlCommand(sql);
	MessageDataSet data = new MessageDataSet();
	
	DbParameter param = null;
	param = Database.CreateParameter("@ParentId", "ParentId", parentId);
	cmd.Parameters.Add(param);
	
	Database.LoadDataSet(cmd, data, "Message");

	return data;
}

Deze query haalt het Parent-bericht op en alle berichten die een directe reply zijn.
Let ook op het gebruik van Parameters: @ParentId.
Met deze werkwijze kan je zoveel parameters toevoegen als je wil.
Dit zal vooral handig worden bij onze Insert-, Update- en Delete-queries.

Na het toevoegen van de methode in MessageDataAccessor moeten we uiteraard nog een methode toevoegen in MessageServices.

public MessageDataSet GetMessagesByParentId(int parentId)
{
	using (MessageDataAccessor da = new MessageDataAccessor())
	{
		return da.GetMessagesByParentId(parentId);
	}
}

Click-event toevoegen aan de TreeView

[bewerken]

Om de treeview duidelijk te maken dat erop geklikt werd moeten we het Click-event opvangen.
Bij een TreeView kan je dat doen door middel van het SelectedNodeChanged-event.

  1. Open Default.aspx.cs
  2. Ga naar de Designer view
  3. Dubbelklik op de TreeView in de Designer Surface of dubbelklik op het SelectedNodeChanged-event in de events-tab van de Properties
  4. Voeg de volgende code toe of pas aan:
private void FillGvMessages(int parentId)
{
	MessageDataSet dsMessages = new MessageServices().GetMessagesByParentId(parentId);

	gvMessages.DataSource = dsMessages.Message;
	gvMessages.DataBind();
}
protected void tvMessages_SelectedNodeChanged(object sender, EventArgs e)
{
	TreeNode node = tvMessages.SelectedNode;

	FillGvMessages(int.Parse(node.Value));
}

Deze code zorgt ervoor dat de GridView onder de TreeView opgevuld wordt met het bericht waarop je klikt én alle reply's op dat bericht.

Het beheren van berichten, zoals bewerken, toevoegen en verwijderen bespreek ik in een volgend hoofdstuk.
Nog even geduld daarvoor...

Keer terug naar de hoofdpagina: ASP.net 2.0 N-Tier Tutorial

Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.