簡體   English   中英

如何將具有一個鍵和多個值的列表綁定到GridView或Repeater

[英]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

這個AutoGenerateColumns屬性到底是什么?

~ASP代碼

<asp:GridView ID="MyGridView" runat="server" AutoGenerateColumns = "true" ></asp:GridView>

假設myDatatableConvertToDatatable方法返回的datatable對象。 〜C#代碼:

MyGridview.DataSource = myDatatable;            
MyGridview.DataBind();

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM