如何在ASP.NET Gridview中绑定字典对象

时间:2017-04-21 10:11:18

标签: c# asp.net dictionary gridview

我在gridview中绑定字典对象时遇到问题。

        Dictionary<string, int[]> final_list = (Dictionary<string, int[]>)Session["InstrumentBatch"];
        //The data gets populated in the final_list

        List<KeyValuePair<string, int[]>> kvp = new List<KeyValuePair<string, int[]>>();
        kvp.AddRange(final_list);
        //Adding it to a list because Dictionary is not bind able in gridview.

    gvData.DataSource = kvp;
    gvData.DataBind();

我应该在我的.aspx页面写什么来填充gridview中的数据。欢迎任何类型的帮助。随意提出任何问题

我想将标题显示为 InstrumentType (Dictionary-Key)和 NEW,LN,PR,ANY (字典值)。

谢谢&amp;此致

2 个答案:

答案 0 :(得分:1)

嗯,这很大程度上取决于您想要在页面上显示的内容。通常,KeyValuePair会公开两个属性,Key和Value(可能已经猜到了!),因此您可以在网格视图中使用它们。在BoundField中说:

<asp:BoundField DataField="Key" HeaderText="Key" />
<asp:BoundField DataField="Value" HeaderText="Value" />

但是在你的情况下,这不一定会像你期望的那样工作,因为你的值是一个数组。为此你可以使用某种模板:

<asp:TemplateField HeaderText="Value">
    <ItemTemplate>
        <%# String.Join(",", ((int[])Eval("Value"))) %>
    </ItemTemplate>
</asp:TemplateField>

使用TemplateField:

也可以分离出每列数组的值
<asp:TemplateField HeaderText="Value 0">
    <ItemTemplate>
        <%# ((int[])Eval("Value"))[0] %>
    </ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Value 1">
    <ItemTemplate>
        <%# ((int[])Eval("Value"))[1] %>
    </ItemTemplate>
</asp:TemplateField>
...

答案 1 :(得分:0)

这是可能的。

<asp:GridView ID="GV" runat="server" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField DataField="Key" HeaderText="Dictionary Key" />
        <asp:BoundField DataField="Value" HeaderText="Dictionary Value" />
    </Columns>
</asp:GridView>

首先添加值。

 Dictionary<string, int[]> final_list = (Dictionary<string, int[]>)
 final_list.add(key,value);
 final_list.add(key, value);

然后绑定它,

 gridview.DataSource=final_list;
 gridView.DataBind();