c# - “DropDownList1”具有无效的 SelectedValue,因为它不存在于项目列表中。参数名称 : value

标签 c# asp.net gridview data-binding sqldatasource

我正在使用 TemplateFieldGridView实现edit/delete来自数据库。

我正在使用 SqlDataSource 查询数据控制。

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

'DropDownList1' has a SelectedValue which is invalid because it does not exist in the list of items. Parameter name: value

这是因为来自 dB 的数据不匹配任何 DropDownList国名。

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

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

因此,一种解决方案是从 String 中删除空格 (Trim),以便在 DropDownList 之一中匹配值项目。

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

但是

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

匹配DropDownList的列表项。

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

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

如何将数据更新回 dB?

我的 raw code

最佳答案

"So, one solution is to remove the spaces (Trim) from String so that value get matched in DropDownList fields."

我有点困惑为什么这会有所作为。

您能否向我们展示此 DropDownList 控件创建的原始 HTML,以及您尝试编辑的行。

查看原始 HTML..

  • 在 Chrome 中打开您的网页
  • 按 F12 显示开发者选项
  • 现在,右键单击您网页上的下拉列表,然后选择“检查元素”
  • 在 Chrome 开发者窗口的元素选项卡中,您会看到一个 select 元素,这是 ASP.Net 为您创建的。展开此元素,以查看 option 元素。
  • 查看其中每一项的值属性。

你应该看到一个更复杂的版本......

<select id="listOfPeople">
   <option value=""></option>
   <option value="10">Mike</option>
   <option value="17">Geoffery</option>
   <option value="18">Edward</option>
</select>

...您看到的错误表明,当您单击其中一行时,它的值与选项<中列出的之一不匹配s.

更新

查看您的 .aspx 文件后,我看到您显示了一个国家/地区名称列表,但没有一个具有值:

<asp:DropDownList ID="DropDownList1" runat="server"  SelectedValue='<%# Eval("Country").ToString().Trim()%>'>
    <asp:ListItem>Select Country</asp:ListItem>
    <asp:ListItem>India</asp:ListItem>
    <asp:ListItem>USA</asp:ListItem>
    <asp:ListItem>UK</asp:ListItem>
    <asp:ListItem>China</asp:ListItem>
    <asp:ListItem>North Korea</asp:ListItem>
    <asp:ListItem>Kazakhstan</asp:ListItem>
</asp:DropDownList>

他们不应该看起来像这样吗?

<asp:ListItem Value="North Korea">North Korea</asp:ListItem>

...而不是这个...?

<asp:ListItem>North Korea</asp:ListItem>

(再次 - 使用 Chrome 检查您的国家/地区名称下拉列表确实中是否有Value。如果没有,这将解释错误你看到了。)

更新 2

我从提出相同问题的许多其他 StackOverflow 问题之一窃取了以下提示:

尝试将以下内容添加到您的 edittemplate 中以查看当前值:

<asp:Label ID="lblCountryName" runat="server" Text='<% #Bind("Country") %>'></asp:Label>

Taken from here

这应该会告诉您它试图在您的 DropDownList 控件创建的 option 项列表中寻找但找不到的 Value

关于c# - “DropDownList1”具有无效的 SelectedValue,因为它不存在于项目列表中。参数名称 : value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31919133/

相关文章:

c# - Verlet Integration 正在炸毁我的物理引擎

c# - 是否可以在 C# 中覆盖 DateTime.ToString() 函数

c# - 复杂的 XML 反序列化

ASP.NET 页面说我需要引用一个不存在的程序集!

c# - IHttpHandler : Speeding up performance with parallelism?

数百万行和列的 JavaScript 数据网格

php - 在 Yii2 的 Gridview 中找不到类 'CHtml'

c# - 如何在c#和wpf中实现scrollviewer bouncing的动画?

asp.net - 使用复选框从 gridview 获取值

ASP.NET MVC - 检查请求是否来自另一个操作