簡體   English   中英

將控件綁定到LINQ查詢-找不到字段

[英]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)中指定此DataTextFieldDataValueField屬性,如下所示:

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

這樣,您仍然可以將ToList()函數應用於DataTable,它將起作用(經過測試)。

如果不是,則可能需要在填滿myDataTable之后設置一個斷點,然后在LINQ查詢之后設置另一個斷點,以檢查“ Key”和“ Value”列是否仍然存在。

如果它在數據表中明確包含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"; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM