[英]How to bind a list with one key and multiple values to a GridView or a Repeater
我有一個功能將此列表轉換為數據表
public static DataTable ConvertToDatatable<T>(IList<T> data)
{
PropertyDescriptorCollection props =
TypeDescriptor.GetProperties(typeof(T));
DataTable table = new DataTable();
for (int i = 0; i < props.Count; i++)
{
PropertyDescriptor prop = props[i];
table.Columns.Add(prop.Name, prop.PropertyType);
}
object[] values = new object[props.Count];
foreach (T item in data)
{
for (int i = 0; i < values.Length; i++)
{
values[i] = props[i].GetValue(item);
}
table.Rows.Add(values);
}
return table;
}
我該怎么做才能將這些多個值綁定到轉發器或gridview
您可以在父網格視圖或轉發器內部使用轉發器或網格視圖。
例如:-
Dictionary<int, object> g = new Dictionary<int, object>() { { 1, new { j = "g" } }, { 2, new { j = "ggfdf" } }, { 3, new { j = "gioret" } } };
gridviewparent.DataSource= g.Select(h => new {key= h.Key});
gridviewparent.DataBind();
foreach (GridViewRow item in gridviewparent.Rows)
{
int key= Convert.Toint32( ((Label)item.FindControl("lblkey")).Text) ;
GridView gridviewChild=(GridView)item.FindControl("gridviewchild");
// return g[key] in list
gridviewChild.DataSource= g[key];
gridviewChild.DataBind();
}
您可以在轉發器內使用轉發器。 這是如何做:
將List轉換為Dictionary<string, List<object>>
並將其存儲到可以由.aspx文件訪問的Property(在我的示例中名為Dict
)中(至少protected
或更易於訪問)。
然后在某個時刻調用outerRepeater.DataBind()
(例如在Page_Load(object sender, EventArgs e)
實現中)。
將它放入.aspx
文件中以使其工作:
<asp:Repeater runat="server" ID="outerRepeater" DataSource='<%# Dict.Keys%>'>
<ItemTemplate>
<asp:Repeater runat="server" ID="innerRepeater" DataSource='<%# Dict[DataBinder.Eval(Container, "DataItem").ToString()]%>'>
<ItemTemplate>
<%# DataBinder.Eval(Container, "DataItem")%>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
當您在字典中的List中存儲具體對象時<%# DataBinder.Eval(Container, "DataItem.EventDate")%>
可以使用<%# DataBinder.Eval(Container, "DataItem.EventDate")%>
來訪問屬性(在此示例中使用名稱EventDate
)。 例如: Dictionary<string, List<Event>>
我認為你必須要做的就是將動態數據表綁定到gridView,這是使用asp Gridview控件的內置屬性AutoGenerateColumns =“true”; 除非您確切知道要綁定的列,否則必須使用GridView.RowDataBound Event
。
~ASP代碼
<asp:GridView ID="MyGridView" runat="server" AutoGenerateColumns = "true" ></asp:GridView>
假設myDatatable
是ConvertToDatatable
方法返回的datatable對象。 〜C#代碼:
MyGridview.DataSource = myDatatable;
MyGridview.DataBind();
希望能幫助到你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.