将控件绑定到LINQ查询-找不到字段
本文关键字:找不到 字段 查询 LINQ 控件 绑定 | 更新日期: 2023-09-27 18:07:08
我有几个控件,我试图绑定到LINQ查询,但得到以下错误:
$exception {"DataBinding: 'System.Data. 'DataRow'不包含名为'Key'的属性。"}系统。异常{System.Web.HttpException}
我用下面的方式绑定它:
myDropDownList.DataSource = myDataTable.AsEnumerable().Where(
r => ((string) r["ColumnName"]) == "ColumnIWant").ToList()
myDropDownList.DataTextField = "Key";
myDropDownList.DataValueField = "Value";
我已经尝试了这两个没有。tolist(),建议在其他答案,但没有效果。
"myDataTable"
有"Key"
和"Value"
两列。这是我的理解,你可以这样绑定,但我似乎错过了指定属性名称的一个步骤。
我的建议(因为它已经工作给我这种方式与GridView和下拉列表控件),是你指定这个DataTextField
和DataValueField
属性在设计文件(aspx)像这样:
<asp:DropDownList ID="DropDownList1" runat="server"
DataTextField="Key" DataValueField="Value">
</asp:DropDownList>
这样,您仍然可以将ToList()
函数应用于DataTable,并且它将工作(经过测试)。
如果没有,也许你需要设置一个断点后填写您的myDataTable
和LINQ查询后的另一个,以检查"键"answers"值"列是否仍然存在。
如果它在数据表中明确包含key
和Value
的值,那么我建议您使用如下:
myDropDownList.DataSource = myDataTable.AsEnumerable().Where(
r => (r.Field<string>("ColumnName")) == "ColumnIWant").ToList<DataRow>();
myDropDownList.DataTextField = "Key";
myDropDownList.DataValueField = "Value";
我已经将ToList()
更改为.ToList<DataRow>();
,以便数据课程可以从数据表中找到key
和value
,并更改比较如下:r.Field<string>("ColumnName")
使用。copytodatatable()为我想做的工作,但我仍然更愿意知道如何将数据直接绑定到EnumerableRows集合,如果这是可能的。
我是这样做的:
myDropDownList.DataSource = myDataTable.AsEnumerable().Where(
r => ((string) r["ColumnName"]) == "ColumnIWant").CopyToDataTable();
myDropDownList.DataTextField = "Key";
myDropDownList.DataValueField = "Value";