C# 数据绑定:“System.Data.DataRowView”不包含名为“CityNameHotel\u name”的属性

C# 数据绑定:“System.Data.DataRowView”不包含名为“CityNameHotel\u name”的属性,c#,asp.net,C#,Asp.net,当我试图将两个数据库表列绑定到一个下拉列表时,就会出现这个错误 以下是我使用的代码: GetHotelNames.DataSource = bh.GetHotelNamess(); GetHotelNames.DataTextField = "CityName"+"Hotel_Name"; GetHotelNames.DataBind(); 如果我尝试获取单列值,它可以正常工作,但当我想用DataTextField连接两列时,它会显示错误 我从不同的问题堆中搜索了这个,只找到了一个相关的问题

当我试图将两个数据库表列绑定到一个下拉列表时,就会出现这个错误

以下是我使用的代码:

GetHotelNames.DataSource = bh.GetHotelNamess();
GetHotelNames.DataTextField = "CityName"+"Hotel_Name";
GetHotelNames.DataBind();
如果我尝试获取单列值,它可以正常工作,但当我想用DataTextField连接两列时,它会显示错误

我从不同的问题堆中搜索了这个,只找到了一个相关的问题 但我在这方面没有取得任何成功。 如果要将两个数据库表列值放到一个下拉列表中,该怎么办?

您不能在DataTextField中指定多个列,而是可以基于上述两列在数据源中创建一个新的连接列,然后将其指定为DataTextField

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

Select CityName, Hotel_Name, otherField
From yourtable
....
然后使用连接创建一个新列(如果是Sql Server),然后:

然后可以指定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 
您不能在DataTextField中指定多个列,而是可以基于上述两列在数据源中创建一个新的连接列,然后将其指定为DataTextField

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

Select CityName, Hotel_Name, otherField
From yourtable
....
然后使用连接创建一个新列(如果是Sql Server),然后:

然后可以指定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 

您需要在数据源本身中创建这些连接列,例如,如果您从存储过程中获取数据,则需要通过连接CityName和Hotel_Name创建一个新列,然后将此列分配给您的DataTextField

您需要在数据源本身中创建这些连接列,例如,如果您从存储过程获取数据,请通过连接CityName和Hotel_Name创建一个新列,然后将此列分配给您的DataTextField,尝试以下操作:

GetHotelNames.Items.Clear();

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

GetHotelNames.Items.Clear();

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

@aami,看看代码中的代码示例,您不能将多个列指定为DataTextField。您的意思是说我必须为此更改存储过程?我这样做并创建了一个组合列,但它只显示城市名称,而不是在下拉列表中显示城市和酒店。@aami,修改您的选择查询,如:选择Hotel_Info.Hotel_Name,city.CityName+,“+Hotel_Info.Hotel_Name作为Hotel_Info左侧的组合列。在Hotel_Info.CityID=CityID=city.citydthank,你是这一切的主宰……现在一切都好了。我的程序中缺少“+”,“+”query@aami,请看代码中的代码示例,您不能将多个列指定为DataTextField。您的意思是说我必须为此更改存储过程?我这样做并创建了一个组合列,但它只显示城市名称,而不是在下拉列表中显示城市和酒店。@aami,修改您的选择查询,如:选择Hotel_Info.Hotel_Name,city.CityName+,“+Hotel_Info.Hotel_Name作为Hotel_Info左侧的组合列。在Hotel_Info.CityID=CityID=city.citydthank,你是这一切的主宰……现在一切都好了。我的过程查询中缺少“+”、“+”返回类型bh.GetHotelNames是什么?你的抓取如何在GetHotelNames函数中记录数据,你能发布代码吗?@mshsayem DataSet是返回类型什么是返回类型bh.GetHotelNames?你的抓取如何在GetHotelNames函数中记录数据,您可以发布代码吗?@mshsayem数据集是返回类型这是我的程序代码从Hotel\u Info.Hotel\u Name中选择Hotel\u Info.Hotel\u Name,City.CityName作为组合列从Hotel\u Info左外加入Hotel\u Info.CityID=City.CityID更改查询以选择Hotel\u Info.Hotel\u Name,Hotel_Info.Hotel_Name+'''.'+City.CityName作为Hotel_Info左外部的组合列在Hotel_Info.CityID=City.CityID上加入城市,并将组合列分配给您的数据源这是我的程序代码选择Hotel_Info.Hotel_Name,City.CityName作为Hotel\u Info中的CombinedColumn LEFT OUTER在Hotel\u Info.CityID=City.CityID上加入City更改查询以选择Hotel\u Info.Hotel\u Name、Hotel\u Info.Hotel\u Name+'\u'+City.CityName作为Hotel\u Info中的CombinedColumn在Hotel\u Info.CityID=City.CityID上加入City并将CombinedColumn分配给数据源