C# DropDownList.DataTextField可以';不能绑定到数据集?

C# DropDownList.DataTextField可以';不能绑定到数据集?,c#,asp.net,C#,Asp.net,我正在尝试将一个数据集绑定到一个下拉列表,该列表抛出一个HttpException 这就是我要做的 if (dsGroupsNotOnFestival.Tables[0].Rows.Count > 0) { //Bind dataset to new group selection ddlNewGroup.DataSource = dsGroupsNotOnFestival.Tables[0].DefaultView; ddlNewGroup.DataValueFi

我正在尝试将一个
数据集
绑定到一个
下拉列表
,该列表抛出一个
HttpException

这就是我要做的

if (dsGroupsNotOnFestival.Tables[0].Rows.Count > 0)
{
    //Bind dataset to new group selection
    ddlNewGroup.DataSource = dsGroupsNotOnFestival.Tables[0].DefaultView;
    ddlNewGroup.DataValueField = "band_id";
    ddlNewGroup.DataTextField = "band_naam";
    ddlNewGroup.DataBind();
}
else
{
    ddlNewGroup.Items.Add(new ListItem("No groups to add"));
}
异常消息:

DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'band_naam'.
我绝对肯定,
数据集
包含一个标题为_-naam的列。如您所见,绑定
DataTextField
时会引发异常,这意味着
DataValueField
绑定正确,对吗

编辑:

这是存储过程:

USE [groep2_festivals]
GO
/****** Object:  StoredProcedure [dbo].[GetGroupsOfFestival]    Script Date: 14-05-13 12:31:18 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      Robbie Vercammen
-- Create date: 2013-05-09
-- Description: Getting all groups for a defined festival
-- =============================================
ALTER PROCEDURE [dbo].[GetGroupsOfFestival]
    (
    @festId  nvarchar(4)
    )
AS
BEGIN
    DECLARE @query varchar(255)

    SELECT b.*, p.* 
    FROM bands b 
    JOIN bandsperfestival bpf ON b.band_id = bpf.band_id 
    JOIN podia p ON p.pod_id = bpf.pod_id WHERE fest_id LIKE @festId
    EXEC(@query)
END
注意
b.*
波段b
? 现在这张桌子:

这个存储过程已经被多次使用,所以我很确定它工作正常。但这里可能是我忘记提到的最重要的代码:

//Filling dataset with groups not on this festival
dsGroupsNotOnFestival.Tables.Add(new DataTable());
foreach (DataRow row in dsGroupsAll.Tables[0].Rows)
{
    if (!dsGroupsPerFestival.Tables[0].Rows.Equals(row))
    {
        dsGroupsNotOnFestival.Tables[0].ImportRow(row);
    }
}
再一次,以前使用过
数据集
dsGroupsAll,因此数据是存在的:)

@曼尼什米什拉 dsGroupsAll使用上面相同的存储过程填充。 为了证明里面确实有数据:

对于那些仍然关注的人,我已经确认
dsGroupsNotOnFestival
中有14行。 当我试图以简单的方式获取值时,例如:

String strResult = dsGroupsNotOnFestival.Tables[0].Rows[0][0].ToString();
我收到一个异常,说明找不到列0。。。为什么呢

我绝对肯定数据集包含一个标题为“_naam”的列

我理解你的感受,但我绝对肯定没有,因为这个错误非常明显:

不包含名为“band_naam”的属性

再次查看填充该
数据集的代码。
DefaultView
DataTable
的完美图像,当然这是查询的结果集,因此用于填充此
DataTable
的查询缺少此字段

可能是一个计算字段,而您忘记了
AS
关键字来给它一个列名。


编辑 根据您的反馈(即查询和模式的屏幕截图),我想说Habib可能在评论中击中了它的头部,更改这一行:

ddlNewGroup.DataSource = dsGroupsNotOnFestival.Tables[0].DefaultView;
ddlNewGroup.DataSource = dsGroupsNotOnFestival.Tables[0];
关于这一行:

ddlNewGroup.DataSource = dsGroupsNotOnFestival.Tables[0].DefaultView;
ddlNewGroup.DataSource = dsGroupsNotOnFestival.Tables[0];

我个人在绑定到
DefaultView
时从来没有遇到过问题,但我觉得没有任何其他可能性。

不确定是否允许我批准自己的答案,但我找到了解决我噩梦的方法

//Filling dataset with groups not on this festival
dsGroupsNotOnFestival = dsGroupsPerFestival.Clone();
foreach (DataRow row in dsGroupsAll.Tables[0].Rows)
{
    if (!dsGroupsPerFestival.Tables[0].Rows.Equals(row))
    {
        dsGroupsNotOnFestival.Tables[0].ImportRow(row);
    }
}
不同之处在于,我正在克隆原始的
数据集
,使用以下方法保留结构、约束等:

dsGroupsPerFestival.Clone()

谢谢大家帮助我

不要将
dsGroupsNotOnFestival.Tables[0].DefaultView
指定为数据源,而只将该表指定为
dsGroupsNotOnFestival.Tables[0]
检查
DataSet
中的列名中是否有任何尾随空格。注释//ddlNewGroup.DataTextField=“band_naam”?时代码是否正在运行?我会试试的,不知道为什么我没想过earlier@Serge,你说得对。。。即使值字段是先绑定的,它仍然会在文本字段上显示错误。当注释出来时,我在值字段上得到了相同的错误,有什么想法吗?没有,包含band_naam的表肯定在那里。我将发布存储过程和相关的表的图像。谢谢你迄今为止的帮助。如果你需要更多信息,请告诉我know@RobbieVercammen,podia的结构是什么样的?三列:pod_id int、pod_omschr nvarchar(255)、pod_locatie nvarchar(255)。当我确定一个数据集只有一个表时,我通常会绑定数据集而不绑定.Tables[0]声明,它作为well@RobbieVercammen为什么不简单地调试和检查.Tables[0]?下拉菜单或c#没有什么问题。它必须是您的sp和表。使用断点如果您认为这是发布的最佳解决方案,您可以选择自己的答案作为正确答案。