asp.net – 如何修复“’ddlAssignedTo’有一个无效的SelectedValue,因为它在项目列表中不存在

我加载了gridview,gridview有一个编辑和删除按钮.

我点击编辑,我得到,“ddlAssignedTo”有一个无效的SelectedValue,因为它在项目列表中不存在.
参数名称:值

我知道我收到此错误,因为fo ddlAssignedTo的值为null – ddlAssignedTo的db上没有任何内容.

我所要做的就是更新当前值.

所以,我的问题是,如果当前值为null,我如何为ddlAssignedTo分配一个认值,这样如果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],[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>

代码隐藏:

Protected Sub GridView1_RowUpdating(ByVal sender As Object,ByVal e As GridViewUpdateEventArgs) Handles GridView1.RowUpdating

    Dim dd As DropDownList = DirectCast(GridView1.Rows(e.RowIndex).FindControl("ddlstatus"),DropDownList)
    e.NewValues("status") = dd.SelectedItem.Text
    Dim ddAssigned As DropDownList = DirectCast(GridView1.Rows(e.RowIndex).FindControl("ddlAssignedTo"),DropDownList)

    If String.IsNullOrEmpty(ddAssigned.SelectedValue) Then
        ddAssigned.SelectedValue = "shhhh"
    Else
        e.NewValues("empl_id") = ddAssigned.SelectedValue
    End If

    sqlDataSource1.DataBind()
End Sub

解决方法

看一下@ cosmin.onea在问题 ‘DropDownList1’ has a SelectedValue which is invalid because it does not exist in the list of items中提供的解决方

解决方案在DropDownList上设置AppendDataBoundItems =“true”并创建一个可空的ListItem,以便即使表中的字段为空,DropDownList也将绑定.

应用于OP的问题,以下代码段将提供在AssignedTo字段为空时选择的选项.

<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>

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....