Asp.net
如何修復“‘ddlAssignedTo’ 的 SelectedValue 無效,因為它不存在於項目列表中
我載入了gridview,gridview 有一個編輯和刪除按鈕。
我點擊編輯,我得到,“
ddlAssignedTo' has a SelectedValue which is invalid because it does not exist in the list of items. Parameter name: value我知道我收到此錯誤是因為 fo
ddlAssignedTo值為 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>