如何修复“'ddlAssignedTo' 有一个无效的 SelectedValue,因为它不存在于项目列表中 [英] How to fix "'ddlAssignedTo' has a SelectedValue which is invalid because it does not exist in the list of items

查看:20
本文介绍了如何修复“'ddlAssignedTo' 有一个无效的 SelectedValue,因为它不存在于项目列表中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I load the gridview and the gridview has an edit and delete buttons.

我单击编辑",然后得到ddlAssignedTo' 有一个无效的 SelectedValue,因为它不存在于项目列表中.参数名称:值

I click on Edit and I get, "ddlAssignedTo' has a SelectedValue which is invalid because it does not exist in the list of items. Parameter name: value

我知道我收到此错误是因为 ddlAssignedTo 的值为 null - ddlAssignedTo 的数据库中不存在任何内容.

I know that I am getting this error because the value fo ddlAssignedTo is null - nothing exists on the db for ddlAssignedTo.

我所做的只是更新当前值.

All I was trying to do is update the current value.

所以,我的问题是,如果当前值为空,我如何为 ddlAssignedTo 分配默认值,以便如果数据库上当前不存在任何值,则以默认值为准?

So, my issue is this, if the current value is null, how do I assign a default value for ddlAssignedTo so that if no value currently exists on the db, the default value will prevail?

这里有一些代码:

标记:

<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,因为它不存在于项目列表中

Take a look at the solution provided by @cosmin.onea in the question 'DropDownList1' has a SelectedValue which is invalid because it does not exist in the list of items

此解决方案在 DropDownList 上设置 AppendDataBoundItems="true" 并创建一个 nullable ListItem,以便您的 DropDownList> 即使表中的字段为空也会绑定.

This solution sets AppendDataBoundItems="true" on the DropDownList and creates one nullable ListItem so that your DropDownList will bind even when the field in the table is null.

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

Applied to the OP's problem, the following snippet would provide an option that would be selected when the AssignedTo field is 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>

这篇关于如何修复“'ddlAssignedTo' 有一个无效的 SelectedValue,因为它不存在于项目列表中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆