我在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;此致
答案 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();