3

我正在尝试将 a 绑定dataset到 a dropdownlist,这会引发 aHttpException

这就是我想要做的

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'.

我绝对肯定它dataset包含一个标题为 band_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.*bands 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);
    }
}

再一次,DataSetdsGroupsAll 之前已经使用过,所以数据是存在的:)

@manish mishra dsGroupsAll 填充了上述相同的存储过程。为了证明那里确实有数据:

在此处输入图像描述

对于那些仍在关注的人,我已经确认dsGroupsNotOnFestival. 当我尝试以简单的方式获取值时,例如:

String strResult = dsGroupsNotOnFestival.Tables[0].Rows[0][0].ToString();

我收到一个异常,说找不到第 0 列……这是为什么呢?

4

2 回答 2

3

我绝对肯定数据集包含标题为 band_naam 的列。

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

不包含名为“band_naam”的属性

再看一下填充它的代码DataSet。是的DefaultView完美图像DataTable,这当然是您的查询的结果集,因此您用来填充它的查询DataTable缺少此字段。

也许它是一个计算字段,而您忘记了AS给它一个列名的关键字。


编辑

根据您的反馈(即查询和架构的屏幕截图),我会说 Habib 可能在评论中一针见血,更改此行:

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

到这一行:

ddlNewGroup.DataSource = dsGroupsNotOnFestival.Tables[0];

我个人从来没有遇到过绑定 a 的问题,DefaultView但我觉得没有其他可能性了。

于 2013-05-14T12:05:51.960 回答
1

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

//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);
    }
}

不同之处在于,我正在使用以下方法克隆DataSet保留结构、约束等的原始文件:

dsGroupsPerFestival.Clone()

感谢大家帮助我!

于 2013-05-14T13:48:52.353 回答