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

时间:2015-08-10 16:32:06

标签: c# asp.net linq binding

我有几个控件,我试图绑定到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"列。我理解你可以用这种方式绑定,但我似乎错过了指定属性名称的步骤。

3 个答案:

答案 0 :(得分:1)

我的建议(因为它使用GridView和DropDownList控件以这种方式工作),是你在设计文件(aspx)中指定这个DataTextFieldDataValueField属性,如下所示:

<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";