Quantcast
Channel: SharePoint 2010 - General Discussions and Questions forum
Viewing all articles
Browse latest Browse all 17574

Grouping Data by multiple columns using datalist

$
0
0

I need to display the DataList grouped  by Category then by  Sub-Category and then by Topic as shown below .

My database is Sharepoint List. 

I am able to Group items Using Category Columnbut  not further with Sub Category and Topic column
Please Suggest me how to group items with multiple columns using DataList Control ?

Below code code works fine for Grouping with One column like Category (Sharepoint Visual WebPart)

My Code :

<div id="col" runat="server" class="column col-1">
                    <asp:DataList ID="parentData" runat="server" RepeatColumns="2" RepeatDirection="Vertical" OnItemDataBound="parentData_ItemDataBound">
                        <ItemTemplate>
                            <div style="width: 150px; height: 150px">
                                <h4 id="h4Id1" runat="server" class="subtitle"><%#DataBinder.Eval(Container.DataItem, "Category")%></h4>
                                <asp:DataList ID="childData" runat="server">
                                    <ItemTemplate>
                                        <ul>
                                            <li><a id="aId1" runat="server" href='<%#DataBinder.Eval(Container.DataItem,"Url")%>'><%#DataBinder.Eval(Container.DataItem, "Title")%></a></li>
                                        </ul>
                                    </ItemTemplate>

                                </asp:DataList>
                            </div>
                        </ItemTemplate>
                    </asp:DataList>
                </div>

Code Behind C#

Within Page Load Function {

SPQuery query1 = new SPQuery();   // Caml query to sort by Display Order
                            query1.Query = "<GroupBy Collapse='TRUE'><FieldRef Name='Category'/></GroupBy><OrderBy><FieldRef Name='Display Order' Ascending='True'/></OrderBy>";
                            SPListItemCollection items = list.GetItems(query1);
                            DataTable dataTable = new DataTable();
                            DataColumn dataColumn;
                            dataColumn = new DataColumn("Title", Type.GetType("System.String"));
                            dataTable.Columns.Add(dataColumn);
                            dataColumn = new DataColumn("Url", Type.GetType("System.String"));
                            dataTable.Columns.Add(dataColumn);
                            dataColumn = new DataColumn("Category", Type.GetType("System.String"));
                            dataTable.Columns.Add(dataColumn);
                            DataRow dataRow;

                            foreach (SPListItem item in items)
                            {
                                            dataRow = dataTable.NewRow();
                                            dataRow["Category"] = item["Category"].ToString();
                                            dataRow["Title"] = item["Name"].ToString();
                                            dataRow["Url"] = url;
                                            dataTable.Rows.Add(dataRow);
                            }
                            DataTable dtParent = new DataTable();
                            DataView view = new DataView(dataTable);   //pass DataTable object to a DataView
                            dtParent = view.ToTable(true, "Category");   //Select Distinct Category
                            CategoryCount = dtParent.Rows.Count;
                            DataSet dataSet = new DataSet();  // Initialize a new Data Set
                            dataSet.Tables.Add(dtParent);  // Add parent Table to the DataSet
                            dataSet.Tables.Add(dataTable);  // Add default table to DataSet  
                            dataSet.Relations.Add(new DataRelation("Categories", dataSet.Tables[0].Columns["Category"],dataSet.Tables[1].Columns["Category"], false));  // Pass Parent and Child DataTables in DataRelation
                            parentData.DataSource = dataSet.Tables[0];
                            parentData.DataBind();  // Bind Parent DataList

}

// Function on Item Data Bound 

        protected void parentData_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
        {
            DataListItem item = e.Item;
            NoOfColumns = (int)Math.Ceiling((float)CategoryCount / 2);
            parentData.RepeatColumns = NoOfColumns;
            if ((item.ItemType == ListItemType.Item) || (item.ItemType == ListItemType.AlternatingItem))
            {
                DataList innerRep = e.Item.FindControl("childData") as DataList;

                DataRowView dataRowView = (DataRowView)item.DataItem;
                innerRep.DataSource = dataRowView.CreateChildView("Categories");
                innerRep.DataBind();
            }
        }


Regards, Sud Zohaan Technet Formum




Viewing all articles
Browse latest Browse all 17574

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>