GridView编辑时用DDL更新数据库遇空值错误求助
解决GridView编辑时DropDownList更新报“无法插入空值”的问题
这个问题的核心原因很明确:你的DropDownList虽然绑定了数据源显示用户列表,但没有把选中的值和GridView的username字段做双向绑定,导致点击更新时,SqlDataSource1的@username参数没有获取到任何值,数据库因为username字段不允许空值而抛出错误。
具体修复步骤:
- 修改EditItemTemplate里的DropDownList标记,添加
SelectedValue='<%# Bind("username") %>',这样选中的值会自动传递给更新命令的@username参数:
<EditItemTemplate> <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource2" DataTextField="username" DataValueField="username" SelectedValue='<%# Bind("username") %>'> <!-- 新增这行绑定代码 --> </asp:DropDownList> </EditItemTemplate>
- 额外优化:为了让编辑模式打开时,DropDownList默认选中当前行的username值(而不是默认第一项),上面的
Bind表达式会自动帮你完成这个赋值,不需要额外写后台代码。
可选的额外防护措施:
如果你的users表可能出现空的username,或者想避免用户选择空选项,可以给DropDownList添加默认提示项,同时开启必填验证:
<EditItemTemplate> <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource2" DataTextField="username" DataValueField="username" SelectedValue='<%# Bind("username") %>' AppendDataBoundItems="true"> <asp:ListItem Text="请选择用户" Value="" Enabled="false" Selected="false"></asp:ListItem> </asp:DropDownList> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="DropDownList1" ErrorMessage="必须选择用户" InitialValue="" Display="Dynamic"> </asp:RequiredFieldValidator> </EditItemTemplate>
这样修改后,点击更新时,DropDownList的选中值会正确传递到SqlDataSource的更新命令里,就不会再出现空值错误了。
内容的提问来源于stack exchange,提问作者CM05
相关产品推荐
相关产品推荐

