首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gridview EditItemTemplate DropDownList Get SelectedValue

Gridview EditItemTemplate DropDownList Get SelectedValue
EN

Stack Overflow用户
提问于 2014-04-08 18:59:30
回答 2查看 15.9K关注 0票数 5

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

代码语言:javascript
复制
<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,并为该行选择正确的值。

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

代码语言:javascript
复制
protected void UpdateRow(object sender, GridViewUpdateEventArgs e)
{
    GridViewRow row = UserGV.Rows[e.RowIndex];
    DropDownList ddl = row.FindControl("ddlDeptCode") as DropDownList;
    string deptCode = ddl.SelectedValue;
}

它找到了DropDownList控件,但是SelectedValue始终是一个空字符串。

我需要访问选定的值以保存到数据库。

对于如何在代码中获得Gridview中的SelectedValue DropDownList有什么想法吗?

编辑:

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

代码语言:javascript
复制
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;
       }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-09 19:29:46

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

代码语言:javascript
复制
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);

我不完全理解这是如何干扰获得SelectedValue的DropDownList控件,但我一评论,它就开始工作。

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

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

代码语言:javascript
复制
OnRowCreated="CreateRow"

在后面的代码中,我添加了以下方法:

代码语言:javascript
复制
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);
    }
}

现在一切都正常了。

票数 2
EN

Stack Overflow用户

发布于 2021-01-23 06:07:33

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

代码语言:javascript
复制
 SelectedValue='<%# Bind("DeptCode") %>'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22945922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档