网格视图行数据绑定显示每行的隐藏列

本文关键字:隐藏 显示 视图 数据绑定 网格 | 更新日期: 2023-09-27 18:34:14

我有一个网格视图,如果选择了某个下拉列表项,我只想允许文本框可编辑。在我的 RowDataBound 中,我获取值并决定是否应该编辑它,但 .可见属性没有按我的预期工作。使用我的示例数据,我希望第一行和第二行在列中没有文本框,第三行有文本框,第四行不会再次出现。任何帮助将不胜感激。

        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        Control ctrl = e.Row.FindControl("ddlPriceTypeCode");
        if (ctrl != null)
        {
            DropDownList ddl = (DropDownList)ctrl;
            if (ddl.SelectedValue == "UPRC-" || ddl.SelectedValue == "PLEV-0" || ddl.SelectedValue == "PLEV-1" || ddl.SelectedValue == "PLEV-2" || ddl.SelectedValue == "PLEV-3" || ddl.SelectedValue == "PLEV-4" || ddl.SelectedValue == "PLEV-5" || ddl.SelectedValue == "PLEV-6" || ddl.SelectedValue == "PLEV-7")
            {
                //GridView1.Columns[4].Visible = true;
            }
            else 
            { 
                //GridView1.Columns[4].Visible = false;
            }
        }
    }

网格视图行数据绑定显示每行的隐藏列

通过这种方式

,您可以隐藏/显示整个列。RowDataBound为每一行触发,因此列的可见性由最后一行的下拉列表的值给出。

如果仅隐藏/显示文本框,您必须做什么,如下所示:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    Control ctrl = e.Row.FindControl("ddlPriceTypeCode");
    TextBot txt = (TextBox)e.Row.FindControl("txtID");
    if (ctrl != null)
    {
        DropDownList ddl = (DropDownList)ctrl;
        if (ddl.SelectedValue == "UPRC-" || ddl.SelectedValue == "PLEV-0" || ddl.SelectedValue == "PLEV-1" || ddl.SelectedValue == "PLEV-2" || ddl.SelectedValue == "PLEV-3" || ddl.SelectedValue == "PLEV-4" || ddl.SelectedValue == "PLEV-5" || ddl.SelectedValue == "PLEV-6" || ddl.SelectedValue == "PLEV-7")
            txt.Visible = true;
        else 
            txt.Visible = false;
    }
}

显然,"txtID"是您要隐藏/显示的文本框的ID。

据我所知,您不会在此事件中检查所选项目。当数据源属性附加到控件时,将触发此事件。您应该在选择更改事件中检查这一点