![](/img/trans.png)
[英]How to manipulate a DropDownList DataTextField when bound to a cached string array
[英]DropDownList.DataTextField can't be bound to a dataset?
我正在尝试将dataset
绑定到dropdownlist
,该dropdownlist
会抛出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'.
我绝对肯定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);
}
}
再一次, DataSet
dsGroupsAll之前已经使用过,所以数据存在:)
@manish mishra dsGroupsAll充满了上面相同的存储过程。 为了证明那里有实际的数据:
对于那些仍然关注的人,我已经确认dsGroupsNotOnFestival
有14行。 当我试图以简单的方式获取值时,例如:
String strResult = dsGroupsNotOnFestival.Tables[0].Rows[0][0].ToString();
我得到一个例外,说找不到第0列......为什么会这样?
我绝对肯定数据集包含一个标题为band_naam的列。
我理解你的感受,但我绝对肯定没有一个,因为这个错误是非常明确的:
不包含名为'band_naam'的属性
再看一下填充DataSet
的代码。 DefaultView
是DataTable
的完美图像,当然它是查询的结果集,因此您用来填充此DataTable
的查询缺少此字段。
也许它是一个计算字段,你忘了AS
关键字给它一个列名。
根据您的反馈(即查询和架构的屏幕截图),我要说Habib可能会在评论中直接点击它,更改此行:
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);
}
}
区别在于,我正在使用以下方法克隆原始DataSet
保留结构,约束等:
dsGroupsPerFestival.Clone()
谢谢大家帮帮我!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.