繁体   English   中英

数据绑定:“ System.Data.DataRowView”不包含名称为“ CityNameHotel_Name”的属性

[英]DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'CityNameHotel_Name'

当我尝试将两个数据库表列绑定到单个下拉列表时,出现此错误。

这是我使用的代码:

GetHotelNames.DataSource = bh.GetHotelNamess();
GetHotelNames.DataTextField = "CityName"+"Hotel_Name";
GetHotelNames.DataBind();

如果我尝试获取单列值,则效果很好,但是当我想用DataTextField连接两列时会显示错误。

我已经从不同的堆栈问题中搜索了此内容,但只找到一个相关的链接,但是我没有获得任何成功。 如果我想将两个数据库表列的值设为一个下拉菜单,该怎么办?

不能DataTextField 指定多个列 ,而是可以基于以上两列在DataSource中创建一个新的串联列,然后将其指定为DataTextField

例如,如果在后端查询如下:

Select CityName, Hotel_Name, otherField
From yourtable
....

然后使用串联创建一个新列(如果是Sql Server的话)

Select CityName, Hotel_Name, otherField, CityName + HotelName as CombinedColumn
From yourtable
....

然后,您可以将CombinedColumn指定为DataTextField

目前,你所得到的例外由于字符串连接"CityName"+"Hotel_Name"的结果"CityNameHotel_Name" ,并且在你的数据源没有列名为"CityNameHotel_Name"

编辑:根据评论,您没有在查询中串联您的列,它应该像这样:

select 
Hotel_Info.Hotel_Name ,
City.CityName + ',' + Hotel_Info.Hotel_Name as CombinedColumn 
FROM Hotel_Info LEFT OUTER JOIN City ON Hotel_Info.CityID = City.CityID 

您需要在数据源本身中创建这些串联列,例如,如果要从存储过程中获取数据,则需要通过串联CityNameHotel_Name创建新列,然后将该列分配给DataTextField

尝试这个:

GetHotelNames.Items.Clear();

foreach(DataRow item in bh.GetHotelNamess().Tables[0].Rows)
{
    GetHotelNames.Items.Add(new ListItem(item["CityName"] + " " + item["Hotel_Name"])); 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM