我有几个控件,我试图绑定到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"
列。我理解你可以用这种方式绑定,但我似乎错过了指定属性名称的步骤。
答案 0 :(得分:1)
我的建议(因为它使用GridView和DropDownList控件以这种方式工作),是你在设计文件(aspx)中指定这个DataTextField
和DataValueField
属性,如下所示:
<asp:DropDownList ID="DropDownList1" runat="server"
DataTextField="Key" DataValueField="Value">
</asp:DropDownList>
这样,您仍然可以将ToList()
函数应用于DataTable,它将起作用(已测试)。
如果不是,可能需要在填写myDataTable
之后设置一个断点,而在LINQ查询之后填写另一个断点,以检查&#34;键&#34;和&#34;价值&#34;列仍在那里。
答案 1 :(得分:0)
如果它在数据表中明确包含def check(str: String) = str match {
case StrContains"A" => doSomething()
case StrContains"B" => doSomething()
case StrContains"C" => doSomething()
case _ => doSomething()
}
和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
与数据表相同的内容,并按以下方式更改比较:{ {1}}
答案 2 :(得分:0)
使用.CopyToDataTable()适用于我尝试做的事情,但我仍然更愿意知道如何将数据直接绑定到EnumerableRows集合(如果可能的话)。
这是我做的:
myDropDownList.DataSource = myDataTable.AsEnumerable().Where(
r => ((string) r["ColumnName"]) == "ColumnIWant").CopyToDataTable();
myDropDownList.DataTextField = "Key";
myDropDownList.DataValueField = "Value";