[英]Binding controls to LINQ queries - cannot find field
我有幾個試圖綁定到LINQ查詢的控件,但出現以下錯誤:
$ exception {“ DataBinding:'System.Data.DataRow'不包含名稱為'Key'的屬性。”} System.Exception {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和DropDownList控件DataTextField
),是您在設計文件(aspx)中指定此DataTextField
和DataValueField
屬性,如下所示:
<asp:DropDownList ID="DropDownList1" runat="server"
DataTextField="Key" DataValueField="Value">
</asp:DropDownList>
這樣,您仍然可以將ToList()
函數應用於DataTable,它將起作用(經過測試)。
如果不是,則可能需要在填滿myDataTable
之后設置一個斷點,然后在LINQ查詢之后設置另一個斷點,以檢查“ Key”和“ Value”列是否仍然存在。
如果它在數據表中明確包含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";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.