Asp.net

如何修復“‘ddlAssignedTo’ 的 SelectedValue 無效,因為它不存在於項目列表中

  • May 29, 2018

我載入了gridview,gridview 有一個編輯和刪除按鈕。

我點擊編輯,我得到,“ddlAssignedTo' has a SelectedValue which is invalid because it does not exist in the list of items. Parameter name: value

我知道我收到此錯誤是因為 foddlAssignedTo值為 null - db 上不存在 ddlAssignedTo 的任何內容。

我想做的就是更新目前值。

所以,我的問題是,如果目前值為空,如何為 ddlAssignedTo 分配預設值,以便如果數據庫上目前不存在值,則以預設值為準?

下面是一些程式碼:

標記:

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

程式碼隱藏:

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”中提供的解決方案有一個無效的 SelectedValue,因為它不存在於項目列表中

此解決方案設置AppendDataBoundItems="true"DropDownList創建一個nullableListItem,以便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>

引用自:https://stackoverflow.com/questions/16502905