我開始與ASP.NET,我想知道,如果有任何「智能」的方式顯示數據從DataTable組中?
想象一下下面的例子:我從SQL到數據表分組獲取數據和alredy分類:嵌套中繼器 - 分組數據
protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("parent", typeof(string));
dt.Columns.Add("child", typeof(string));
dt.Rows.Add("AAA", "111");
dt.Rows.Add("AAA", "222");
dt.Rows.Add("AAA", "333");
dt.Rows.Add("BBB", "444");
dt.Rows.Add("BBB", "555");
dt.Rows.Add("CCC", "666");
dt.Rows.Add("CCC", "777");
dt.Rows.Add("CCC", "888");
repeaterParent.DataSource = dt;
repeaterParent.DataBind();
}
,我想頁面上顯示它們象下面這樣:
我試着使用嵌套該轉發器:
<asp:Repeater ID="repeaterParent" runat="server">
<ItemTemplate>
<b><%# DataBinder.Eval(Container.DataItem, "parent") %></b>
<br />
<asp:repeater id="repeaterChild" runat="server">
<itemtemplate>
- <%# DataBinder.Eval(Container.DataItem, "child") %> <br />
</itemtemplate>
</asp:repeater>
</ItemTemplate>
</asp:Repeater>
當然這是行不通的 - 結果如下 - 它既不分組也正在顯示一個孩子:
它是如何做到的 - 控件不必是中繼器 - 它可以是列表視圖,項目符號列表或類似的東西。
最好,如果有一些「聰明」的方式 - 所以我只是將數據表綁定到數據源,並且控件爲我做了其餘的(分組)。我寧願避免將數據源表拆分爲兩個不同的來源,或者爲每個父項目進行SQL查詢,並使用ItemDataBound事件來玩 - 只要有可能。如果沒有 - 你能告訴我任何這樣做嗎? .NET版本:4.0
最好的問候,
馬辛
- 編輯:
我發現下面的解決方案,但是,我真的不喜歡它,因爲每個昂貴的過濾源表項目,我不知道它將如何與大型源數據表。我會很高興地聽到,如果有一個更好的解決方案:
protected void repeaterParent_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
DataRowView drv = (DataRowView)e.Item.DataItem;
string parent = drv["parent"].ToString();
dt.DefaultView.RowFilter = string.Format("[parent]='{0}'", parent);
DataTable dtChild = dt.DefaultView.ToTable(true, "child");
Repeater repeaterChild = (Repeater)e.Item.FindControl("repeaterChild");
repeaterChild.DataSource = dtChild;
repeaterChild.DataBind();
}
我只想讓從數據表手動子對象的對象的列表,然後綁定到這嵌套的中繼器。會有開銷,但少於篩選每個元素。 –