如何使用带有字典列表的asp.net中继器
本文关键字:asp net 中继器 列表 字典 何使用 | 更新日期: 2023-09-27 18:21:48
我有一个字典列表,我这样创建它:
List<Dictionary<String, String>> _list = new List<Dictionary<string, string>>();
var q = from d in db.TT_DELIVERies
where d.DeliveryOrderNumber == donumber
select new { d.DeliveryId };
if (q.Count() > 0)
{
var qd = from d in db.TT_DELIVERY_REQUESTs
where d.DeliveryOrderId == q.ToList()[0].DeliveryId
select new { d.ItemDescription, d.PackageDescription };
Console.Write(qd.Count());
if (qd.Count() > 0)
{
foreach (var r in qd)
{
Dictionary<String, String> temp = new Dictionary<string, string>();
temp.Add("Name", r.ItemDescription);
temp.Add("Desc", r.PackageDescription);
_list.Add(temp);
}
}
}
我试着这样绑定中继器:
rptAddedDocs.DataSource = _list;
rptAddedDocs.DataBind();
这是我的中继器
<asp:Repeater ID="rptAddedDocs" runat="server">
<HeaderTemplate>
<table id="tblListAddedDocs" class="table table-condensed table-hover">
<thead>
<tr>
<th>No</th>
<th>Document Name</th>
<th>Quantity</th>
<th>UOM</th>
<th>Description</th>
<th></th>
</tr>
</thead>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>1</td>
<td><%# Eval("Name")%> </td>
<td>1 </td>
<td>Envlope </td>
<td><%#Eval("Desc")%> </td>
<td></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
但是我得到这样的错误:
DataBinding: 'System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' does not contain a property with the name 'Name'.
请帮我正确使用字典列表中的中继器?
在.aspx文件中,您应该编写以下内容:
<%#((System.Collections.Generic.Dictionary<string, string>)Container.DataItem)["Name"]%>
您似乎混淆了Dictionary<TKey, TValue>
的用途。字典是一种用于存储键/值对的数据结构,其中键是唯一的。Dictionary.Add()
方法的第一个属性是这个键,而不是第二个参数中数据的任意名称。如果您选择保留现有的数据结构,实际上您并不需要List<Dictionary<string, string>>
,而是需要一个简单的Dictionary<string, string>
,并且您需要将数据绑定在"Key"answers"Value"上。
看起来实际上要做的是创建一个不存在的类型的列表,一个具有名为Name
的string
属性,另一个具有Desc
属性。最简单的方法就是用这个定义创建自己的类:
public class MyItem
{
public string Name { get; set; }
public string Desc { get; set; }
}
然后将_list
变量声明为List<MyItem>
的实例,并将foreach
循环中的总体更改为
_list.Add(new MyItem
{
Name = r.ItemDescription;
Desc = r.PackageDescription;
});