Saturday, June 2, 2012

Sample Code: Grouping Data in the DataList

One of the most common question is that if a Datalist displays the data as
Inside Sales Coordinator Callahan
Sales Manager Buchanan
Sales Representative Suyama
Sales Representative King
Sales RepresentativeDavolio
Sales Representative Leverling
Sales Representative Peacock
Sales Representative Dodsworth
Vice President, Sales Fuller
How to display the result in a way that :
Sales Manager,Sales Representative...etc appear only once. 
Inside Sales Coordinator Callahan
Sales Manager Buchanan
Sales Representative Suyama
King
Davolio
Leverling
Peacock
Dodsworth
Vice President, Sales Fuller
Here goes the code 
HTML Source
<asp:DataList id="DataList1" runat="server">
<HeaderTemplate >
    <table width=100%>
</HeaderTemplate>
<ItemTemplate>
   <tr><td>
   <asp:Label Runat=server
   text=<%#DataBinder.Eval(Container.DataITem, "Title")%> ID="lblTitle">
   </asp:Label>
   <td><asp:Label Runat=server
   text=<%#DataBinder.Eval(Container.DataITem, "LastName")%> ID="lblLastName">
   </asp:Label>
</ItemTemplate>
<FooterTemplate>
   </table>
</FooterTemplate>
</asp:DataList>
Code Behind 
Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load 
If Not Page.IsPostBack Then 
  BindTitle() 
End If 
End Sub  
Sub BindTitle() 
  Dim ds As New DataSet() 
  Dim sqlStmt As String = "SELECT * FROM Employees order by title" 
  Dim conString As String = "server=localhost;database=Northwind;uid=sa;pwd=;" 
  Dim myda As SqlDataAdapter = New SqlDataAdapter(sqlStmt, conString) 
  myda.Fill(ds, "Table") 
  DataList1.DataSource = ds 
  DataList1.DataBind() 
End Sub 
Private Sub DataList1_ItemDataBound(ByVal sender As Object, _ 
ByVal e As System.Web.UI.WebControls.DataListItemEventArgs) Handles DataList1.ItemDataBound 
If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then 
  Dim strval As String = CType(e.Item.FindControl("lblTitle"), Label).Text 
  Dim title As String = ViewState("title") 
  If title = strval Then 
    CType(e.Item.FindControl("lblTitle"), Label).Text = "" 
    e.Item.Visible = False 
  Else 
    title = strval 
    ViewState("title") = title 
    CType(e.Item.FindControl("lblTitle"), Label).Text = title 
    e.Item.Visible = True 
  End If 
End If 
End Sub

No comments: