Asp.net 如何修复“'DDLSassignedTo'具有无效的SelectedValue,因为它不存在于项目列表中
我加载gridview,gridview有一个编辑和删除按钮 我点击编辑,我得到,DDLSassignedTo'有一个SelectedValue,该值无效,因为它不在项目列表中。 参数名称:value 我知道我得到这个错误是因为DDLSassignedTo的值为空-DDLSassignedTo的数据库中不存在任何内容 我所要做的就是更新当前值 所以,我的问题是,如果当前值为null,如何为ddlsignedTo分配默认值,以便在db上当前不存在值的情况下,以默认值为准 以下是一些代码: 标记:Asp.net 如何修复“'DDLSassignedTo'具有无效的SelectedValue,因为它不存在于项目列表中,asp.net,vb.net,gridview,Asp.net,Vb.net,Gridview,我加载gridview,gridview有一个编辑和删除按钮 我点击编辑,我得到,DDLSassignedTo'有一个SelectedValue,该值无效,因为它不在项目列表中。 参数名称:value 我知道我得到这个错误是因为DDLSassignedTo的值为空-DDLSassignedTo的数据库中不存在任何内容 我所要做的就是更新当前值 所以,我的问题是,如果当前值为null,如何为ddlsignedTo分配默认值,以便在db上当前不存在值的情况下,以默认值为准 以下是一些代码: 标记:
<asp:TemplateField HeaderText="Assigned To">
<EditItemTemplate>
<asp:DropDownList ID="ddlAssignedTo" runat="server"
DataSourceID="SubjectDataSource"
DataTextField="fullname" DataValueField="empl_Id"
SelectedValue='<%# Bind("AssignedTo") %>'>
<asp:ListItem Value="">--Select Name--</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblAssigned" runat="server"
Text='<% #Bind("fullname") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT Distinct [rownum],[reqnum], AssignedTo, (empl_first + ' ' + empl_last) fullname, [reqrecdate], [reqrecfrom], [skillsets], [application], [hoursperweek], [fromdate], [todate], [status], [statusupdate], [statusupby] FROM [requestinfo] left join employee on requestInfo.AssignedTo=employee.empl_id ORDER BY [reqnum]"
UpdateCommand="INSERT INTO [requestinfo] ([reqnum], [reqrecdate], [reqrecfrom], [skillsets], [application], [hoursperweek], [fromdate], [todate], [status], [statusupdate], [statusupby],[AssignedTo]) VALUES (@reqnum, @reqrecdate, @reqrecfrom, @skillsets, @application, @hoursperweek, @fromdate, @todate, @status, @statusupdate, @statusupby,@empl_id)">
<DeleteParameters>
<asp:Parameter Name="rownum" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="reqnum" Type="String" />
<asp:Parameter DbType="DateTime" Name="reqrecdate" />
<asp:Parameter Name="reqrecfrom" Type="String" />
<asp:Parameter Name="skillsets" Type="String" />
<asp:Parameter Name="application" Type="String" />
<asp:Parameter Name="hoursperweek" Type="Int32" />
<asp:Parameter DbType="DateTime" Name="fromdate" />
<asp:Parameter DbType="DateTime" Name="todate" />
<asp:Parameter Name="status" Type="String" />
<asp:Parameter DbType="DateTime" Name="statusupdate" />
<asp:Parameter Name="statusupby" Type="String" />
<asp:Parameter Name="empl_id" Type="String" />
<asp:Parameter Name="rownum" Type="Int32" />
</UpdateParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SubjectDataSource" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT empl_id, (empl_first + ' ' + empl_last) fullname FROM dbo.Employee order by empl_last">
</asp:SqlDataSource>
请看@cosmin.onea在问题中提供的解决方案
此解决方案在DropDownList上设置AppendDataBoundItems=true,并创建一个可为null的ListItem,以便即使在表中的字段为null时,DropDownList也将绑定 应用于OP的问题,以下代码段将提供一个选项,当AssignedTo字段为null时将选择该选项
<asp:DropDownList ID="ddlAssignedTo" runat="server"
DataSourceID="SubjectDataSource"
DataTextField="fullname" DataValueField="empl_Id"
SelectedValue='<%# Bind("AssignedTo") %>'
AppendDataBoundItems="true">
<asp:ListItem Text="Select" Value="" />
</asp:DropDownList>
<asp:DropDownList ID="ddlAssignedTo" runat="server"
DataSourceID="SubjectDataSource"
DataTextField="fullname" DataValueField="empl_Id"
SelectedValue='<%# Bind("AssignedTo") %>'
AppendDataBoundItems="true">
<asp:ListItem Text="Select" Value="" />
</asp:DropDownList>
您好,我检查了同样的问题。我的问题是,数据字段的索引号。我使用数据字段索引号,如表[3],在创建gridview后,我更改了数据库表的顺序
毕竟,我使用了字段名称而不是字段索引号,问题已经解决。您在命令SQL Server中遇到的问题,必须在事件激活时将下拉列表的id与当前id进行匹配,然后问题已经解决 请再次参阅包含两个表的键以便查询 BinName必须与命令查询中的名称匹配
此解决方案在DropDownList上设置AppendDataBoundItems=true,并创建一个可为null的ListItem,以便即使在表中的字段为null时,DropDownList也将绑定 应用于OP的问题,以下代码段将提供一个选项,当AssignedTo字段为null时将选择该选项
<asp:DropDownList ID="ddlAssignedTo" runat="server"
DataSourceID="SubjectDataSource"
DataTextField="fullname" DataValueField="empl_Id"
SelectedValue='<%# Bind("AssignedTo") %>'
AppendDataBoundItems="true">
<asp:ListItem Text="Select" Value="" />
</asp:DropDownList>
<asp:DropDownList ID="ddlAssignedTo" runat="server"
DataSourceID="SubjectDataSource"
DataTextField="fullname" DataValueField="empl_Id"
SelectedValue='<%# Bind("AssignedTo") %>'
AppendDataBoundItems="true">
<asp:ListItem Text="Select" Value="" />
</asp:DropDownList>
在此解决方案中,如果用户未选择有效项,则在保存时可能会出现问题。
所以你也可以设置
<asp:ListItem Text="Select" Value="" />
as Enabled=false
然后,当您打开一个新项目时,它将带来数据库中存在的一个项目
我也遇到了同样的问题,问题也解决了。我不明白您为什么在代码中选择了edValue=。删除它会发生什么?只要错误消失并成功修改,就会发生这种情况。但唯一的问题是,如果我需要用另一个值替换AssignedTo的当前值,当我单击“编辑”时,我需要查看当前值。现在,它显示为空。虽然您可以从下拉列表中选择它,但如果在编辑模式下将其视为预选的,那就太好了。尝试在edittemplate中放置另一个标签以查看当前值我尝试过,但当我单击edit进入编辑模式时,我再也看不到下拉列表。我只看到了value。