标签: edititemtemplate

错误:SelectedValue无效,因为它在项目列表中不存在

我有一个Gridview绑定到ObjectDataSource(objStudentDetails).在Gridview的编辑/插入模式中,其中一个字段是DropDownList,它从查找表中获取它的选择列表选项.我将此DropDownList绑定到另一个表示查找表的ObjectDataSource控件(objStateList).只要objStudentDetails ObjectDataSource中的值与objStateList ObjectDataSource中的某个值匹配,它就可以正常工作,至少在非空字符串值的情况下是这样.

objStateList具有这些值(来自存储的proc加载它 - ID#6是一个空字符串''):

StateId     State
----------- -----
6             
4           AL
1           GA
3           KY
2           TN
Run Code Online (Sandbox Code Playgroud)

objStudentDetails具有这些值(来自加载它的存储过程):

FirstName   LastName   State
----------- ---------- -----
tone        smith      TN
Run Code Online (Sandbox Code Playgroud)

或者它可以有这个结果集(State是一个空字符串 - ''):

FirstName   LastName   State
----------- ---------- -----
jenny       johnson     
Run Code Online (Sandbox Code Playgroud)

在第一个objStudentDetails结果集中,EditItemTemplate中的状态DropDownList显示正常.但是,在第二个结果集中,我收到此错误:

'ddlEditState' has a SelectedValue which is invalid because it does not exist in the list of items.
Parameter name: value 
Run Code Online (Sandbox Code Playgroud)

我认为,因为我的查找表有一个空字符串的值,objStudentDetails值与状态的空字符串匹配,但有些东西不能按照我期望的方式工作.

这是Gridview的EditItemTemplate代码:

<EditItemTemplate>
  <asp:Panel ID="panEditState" runat="server">
    <asp:DropDownList ID="ddlEditState" runat="server" CssClass="GridviewDropdownlist"
      DataSourceID="objStateList" DataTextField="State" DataValueField="State"      
      SelectedValue='<%# Bind("State") %>'
      Width="50px">
</asp:DropDownList>
</asp:Panel> …
Run Code Online (Sandbox Code Playgroud)

asp.net gridview edititemtemplate drop-down-menu

5
推荐指数
1
解决办法
2万
查看次数

Gridview EditItemTemplate DropDownList获取SelectedValue

在我的Gridview中,我有以下模板字段:

<asp:TemplateField HeaderText="Dept Code" SortExpression="DeptCode">
    <ItemTemplate>
        <%# Eval("DeptCode") %>
    </ItemTemplate>
    <EditItemTemplate>
        <asp:DropDownList ID="ddlDeptCode" runat="server" 
            SelectedValue='<%# Eval("DeptCode") %>' 
            DataSource='<%# GetAllDepartments() %>' 
            DataTextField="DeptCode" 
            DataValueField="DeptCode" />
    </EditItemTemplate>
</asp:TemplateField> 
Run Code Online (Sandbox Code Playgroud)

当我在一行上单击“编辑”时,此方法非常有用,它会用所有值填充DropDownList并为该行选择正确的值。

但是,当我尝试更新该行时: OnRowUpdating="UpdateRow"

protected void UpdateRow(object sender, GridViewUpdateEventArgs e)
{
    GridViewRow row = UserGV.Rows[e.RowIndex];
    DropDownList ddl = row.FindControl("ddlDeptCode") as DropDownList;
    string deptCode = ddl.SelectedValue;
}
Run Code Online (Sandbox Code Playgroud)

它找到DropDownList控件,但SelectedValue始终是一个空字符串。
我需要访问选定的值才能保存到数据库。

关于如何在后面的代码中的Gridview中获取DropDownList的SelectedValue的任何想法?

编辑:
您还可以从后面的代码填充DropDownList和SelectedValue:

protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
     if (e.Row.RowType == DataControlRowType.DataRow)
     {
        if ((e.Row.RowState & DataControlRowState.Edit) > 0)
        {
           var deptMgr = new DepartmentMgr();
           List<Department> …
Run Code Online (Sandbox Code Playgroud)

c# asp.net gridview selectedvalue edititemtemplate

5
推荐指数
1
解决办法
1万
查看次数