Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Gridview EditItemTemplate下拉列表Get SelectedValue_C#_Asp.net_Gridview_Selectedvalue_Edititemtemplate - Fatal编程技术网

C# Gridview EditItemTemplate下拉列表Get SelectedValue

C# Gridview EditItemTemplate下拉列表Get SelectedValue,c#,asp.net,gridview,selectedvalue,edititemtemplate,C#,Asp.net,Gridview,Selectedvalue,Edititemtemplate,在我的Gridview中,我有以下模板字段: <asp:TemplateField HeaderText="Dept Code" SortExpression="DeptCode"> <ItemTemplate> <%# Eval("DeptCode") %> </ItemTemplate> <EditItemTemplate> <asp:DropDownList ID="d

在我的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> 
它查找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> departments = deptMgr.GetAllDepartments();
           DropDownList ddList = (DropDownList)e.Row.FindControl("ddlDeptCode");
           ddList.DataSource = departments;
           ddList.DataTextField = "DeptCode";
           ddList.DataValueField = "DeptCode";
           ddList.DataBind();

           string userDeptCode = DataBinder.Eval(e.Row.DataItem, "DeptCode").ToString();
           ddList.SelectedItem.Text = userDeptCode;
           ddList.SelectedValue = userDeptCode;
       }
    }
}
受保护的void gv_RowDataBound(对象发送方,GridViewRowEventArgs e)
{
如果(e.Row.RowType==DataControlRowType.DataRow)
{
如果((e.Row.RowState和DataControlRowState.Edit)>0)
{
var deptMgr=新部门经理();
List departments=deptMgr.GetAllDepartments();
DropDownList ddList=(DropDownList)e.Row.FindControl(“ddlDeptCode”);
ddList.DataSource=部门;
ddList.DataTextField=“DeptCode”;
ddList.DataValueField=“DeptCode”;
ddList.DataBind();
字符串userDeptCode=DataBinder.Eval(例如Row.DataItem,“DeptCode”).ToString();
ddList.SelectedItem.Text=userDeptCode;
ddList.SelectedValue=userDeptCode;
}
}
}

绑定gridview时,我使用了一些技巧来获取表标题的第二个标题:

GridViewRow row = new GridViewRow(0, -1, DataControlRowType.Header, DataControlRowState.Normal);
TableCell th = new TableHeaderCell();
th.HorizontalAlign = HorizontalAlign.Center;
th.ColumnSpan = UserGV.Columns.Count;
th.BackColor = Color.SteelBlue;
th.ForeColor = Color.White;
th.Font.Bold = true;
th.Text = "Manage Users";
row.Cells.Add(th);
InnerTable.Rows.AddAt(0, row);
我不完全理解这是如何干扰获取DropDownList控件的SelectedValue的,但我一评论它就开始工作了

对于那些感兴趣的人,我用另一种方法得到了第二个标题:

在.aspx文件中,我将其添加到Gridview中:

OnRowCreated="CreateRow"
在代码隐藏中,我添加了以下方法:

protected void CreateRow(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.Header)
    {           
        GridView gridView = (GridView)sender;
        GridViewRow row = new GridViewRow(1, 0, DataControlRowType.Header, DataControlRowState.Normal);
        TableCell th = new TableHeaderCell();
        th.HorizontalAlign = HorizontalAlign.Center;
        th.ColumnSpan = UserGV.Columns.Count;
        th.ForeColor = Color.White;
        th.BackColor = Color.SteelBlue;
        th.Font.Bold = true;
        th.Text = "Manage Users";
        row.Cells.Add(th);

        gridView.Controls[0].Controls.AddAt(0, row);
    }
}

现在一切正常。

在编辑模板中,从数据绑定中设置
selectedvalue
,然后您将获得正确的选定值,而不是空值

 SelectedValue='<%# Bind("DeptCode") %>'
SelectedValue=''

您是从同一个gridview表还是从另一个表填充dropdownlist?我明白了,因为我用xml创建了一个简单的数据库,创建了两个表,然后完全尝试了您的代码,它工作正常,正确显示了值,所以我不确定问题出在哪里,但我会上传我制作的简单项目,也许到时候你能找到答案。我仍然怀疑你的问题是数据库值,而不是dropdownlist的设计和访问,无论如何,请从这里下载示例:我希望它对您有所帮助。好吧,然后等待更新。是的,您现在知道这个问题确实很奇怪,但很好,至于添加第二个标题的替代方法,我已经在这里使用此方法,只需复制RowCreated&AddMergedCell方法并修改它们以满足您的需要。我现在得走了,但我希望你能解决这个问题,坚持下去。谢谢@Baxter为我节省时间:)不确定这是否与将来访问此线程的人有关,但我遇到了一个问题,即GridView(templatefield)的dropdownlist(ddl)中的SelectedIndex在单击编辑模式时还原为第一个索引(丢失数据库值/SelectedIndex)@Baxter问题中的编辑注释/示例代码帮助我认识到,我在ddl datatbind之前设置SelectedIndex,而在ddl datatbind之后设置SelectedIndex。我花了好几天的时间想弄明白!
 SelectedValue='<%# Bind("DeptCode") %>'