将控件绑定到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"两列。这是我的理解,你可以这样绑定,但我似乎错过了指定属性名称的一个步骤。

将控件绑定到LINQ查询-找不到字段

我的建议(因为它已经工作给我这种方式与GridView和下拉列表控件),是你指定这个DataTextFieldDataValueField属性在设计文件(aspx)像这样:

<asp:DropDownList ID="DropDownList1" runat="server" 
                  DataTextField="Key" DataValueField="Value">
</asp:DropDownList>

这样,您仍然可以将ToList()函数应用于DataTable,并且它将工作(经过测试)。

如果没有,也许你需要设置一个断点后填写您的myDataTable和LINQ查询后的另一个,以检查"键"answers"值"列是否仍然存在。

如果它在数据表中明确包含keyValue的值,那么我建议您使用如下:

myDropDownList.DataSource = myDataTable.AsEnumerable().Where(
                    r => (r.Field<string>("ColumnName")) == "ColumnIWant").ToList<DataRow>();
myDropDownList.DataTextField = "Key";
myDropDownList.DataValueField = "Value";

我已经将ToList()更改为.ToList<DataRow>();,以便数据课程可以从数据表中找到keyvalue,并更改比较如下:r.Field<string>("ColumnName")

使用。copytodatatable()为我想做的工作,但我仍然更愿意知道如何将数据直接绑定到EnumerableRows集合,如果这是可能的。

我是这样做的:

myDropDownList.DataSource = myDataTable.AsEnumerable().Where(
                        r => ((string) r["ColumnName"]) == "ColumnIWant").CopyToDataTable();
myDropDownList.DataTextField = "Key";
myDropDownList.DataValueField = "Value";