“DropDownList1”的 SelectedValue 无效,因为它不存在于项目列表中。参数名称:值

Jer*_*yal 5 c# asp.net data-binding gridview sqldatasource

我正在使用TemplateFieldin从数据库GridView实现edit/delete

我正在使用控件查询数据SqlDataSource

当我从页面编辑表格时,出现以下错误:

“DropDownList1”的 SelectedValue 无效,因为它不存在于项目列表中。参数名称:值

这是因为 dB 中的数据与任何国家/DropDownList地区名称都不匹配。

我从这个问题理解了问题(那里没有给出解决方案!)

我认为当我将数据插入 dB 时,它会自动向数据添加冗余空格(例如国家/地区名称)

因此,一种解决方案是从字符串中删除空格(修剪),以便值在其中一项中匹配DropDownList

因为<asp:DropDownList ID="DropDownList1" runat="server" SelectedValue='<%# Eval("Country")%>'
与 DropDownList 的任何列表项都不匹配

<asp:DropDownList ID="DropDownList1" runat="server"  SelectedValue='<%# Eval("Country").ToString().Trim()%>'>
Run Code Online (Sandbox Code Playgroud)

与 DropDownList 的列表项匹配。

现在我想将数据更新回数据库,但存储的不是国家/地区名称空值。 (我认为这是 的限制Eval()

Bind() 我可以使用但Bind不支持将数据更新回 dB ToString().Trim(),因此我无法修剪字符串以匹配 DropDownList 中的一项。

如何将数据更新回 dB?

我的原始代码

Jer*_*yal 1

经过几个小时的摸索之后,我终于找到了解决尾随空格问题的优雅解决方案。

在我的表定义中,在Country字段定义中我使用nchar(100)而不是nvarchar(100). 前者始终有 100 个字符(因此尾随空格),后者最多可以有 100 个字符,但不会填满空格(因此与 中的项目匹配DropDownlist)。

简而言之,<asp:DropDownList ID="DropDownList1" runat="server" SelectedValue='<%# Bind("Country")%>'> 现在工作正常。

我希望它对未来的读者有所帮助。