【问题标题】:How to change visibility of FooterRow and Columns on Button Click - C#如何在按钮单击时更改 FooterRow 和列的可见性 - C#
【发布时间】:2015-08-18 00:53:36
【问题描述】:

我有一个大约 16 列的 GridView,出于美学原因,我只想显示某些列,但是如果用户想要插入一行(使用页脚行),我需要使其余列可见。

页面加载时:

protected void Page_Load(object sender, EventArgs e)
{
    if (Add_Button.Text != "Cancel")
    {
        GridView1.FooterRow.Visible = false;
        GridView1.Columns[10].Visible = false;
        GridView1.Columns[11].Visible = false;
        GridView1.Columns[12].Visible = false;
        GridView1.Columns[13].Visible = false;
        GridView1.Columns[14].Visible = false;
        GridView1.Columns[15].Visible = false;
        GridView1.Columns[16].Visible = false;
    }
    else
    {
        GridView1.FooterRow.Visible = true;
    }
}

点击按钮后:

protected void Add_Button_Click(object sender, EventArgs e)
{
    if (GridView1.FooterRow.Visible == false)
    {
        GridView1.Columns[8].Visible = true;
        GridView1.Columns[9].Visible = true;
        GridView1.Columns[10].Visible = true;
        GridView1.Columns[11].Visible = true;
        GridView1.Columns[12].Visible = true;
        GridView1.Columns[13].Visible = true;
        GridView1.Columns[14].Visible = true;
        GridView1.FooterRow.Visible = true;
        Add_Button.Text = "Cancel";
        Panel2.Visible = false;
    }
    else
    {                    
        Add_Button.Text = "Add New Record"; 
        GridView1.FooterRow.Visible = false;
    }
}

客户端页脚行的可见性设置为真,额外列的可见性设置为假。我一直在尝试将页脚行的可见性设置为 false,将列的可见性设置为 true 等等,但似乎没有什么能给我想要的结果。

目前,在第一次单击按钮时,额外的行和页脚行可见,而在第二次单击时,应该使它们再次不可见,它只会使页脚行不可见,而不是列。有什么解决方法吗?

【问题讨论】:

    标签: c# asp.net gridview visibility


    【解决方案1】:

    问题

    由于您的Page_Load 方法中没有if (!this.IsPostBack) 块,因此当您单击Add_Button 时,Page_Load 方法中的所有代码将在执行Add_Button_Click 方法之前执行。

    在第二次点击时,Page_Load 会发生以下情况:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Add_Button.Text != "Cancel")
        {
            GridView1.FooterRow.Visible = false;
            GridView1.Columns[10].Visible = false;
            GridView1.Columns[11].Visible = false;
            GridView1.Columns[12].Visible = false;
            GridView1.Columns[13].Visible = false;
            GridView1.Columns[14].Visible = false;
            GridView1.Columns[15].Visible = false;
            GridView1.Columns[16].Visible = false;
        }
        else
        {
            // this block is executed because Add_Button.Text is "Cancel",
            // which was the result of the first click
            GridView1.FooterRow.Visible = true;
        }
    }
    

    这就是Add_Button_Click 发生的事情:

    protected void Add_Button_Click(object sender, EventArgs e)
    {
        if (GridView1.FooterRow.Visible == false)
        {
            GridView1.Columns[8].Visible = true;
            GridView1.Columns[9].Visible = true;
            GridView1.Columns[10].Visible = true;
            GridView1.Columns[11].Visible = true;
            GridView1.Columns[12].Visible = true;
            GridView1.Columns[13].Visible = true;
            GridView1.Columns[14].Visible = true;
            GridView1.FooterRow.Visible = true;
            Add_Button.Text = "Cancel";
            Panel2.Visible = false;
        }
        else
        {
            // this block is executed because GridView1.FooterRow.Visible is true,
            // which was the result of Page_Load execution on the second click
            Add_Button.Text = "Add New Record"; 
            GridView1.FooterRow.Visible = false;
        }
    }
    

    这就是为什么在第二次点击时列不可见的原因。

    解决方案

    我假设您当前在Page_Load 方法中拥有的内容应该在页面的第一次加载时执行,因此您需要添加if (!this.IsPostBack) 块,如下所示:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.IsPostBack)
        {
            if (Add_Button.Text != "Cancel")
            {
                GridView1.FooterRow.Visible = false;
                GridView1.Columns[10].Visible = false;
                GridView1.Columns[11].Visible = false;
                GridView1.Columns[12].Visible = false;
                GridView1.Columns[13].Visible = false;
                GridView1.Columns[14].Visible = false;
                GridView1.Columns[15].Visible = false;
                GridView1.Columns[16].Visible = false;
            }
            else
            {
                GridView1.FooterRow.Visible = true;
            }
        }
    }
    

    并改变Add_Button_Click方法如下:

    protected void Add_Button_Click(object sender, EventArgs e)
    {
        if (GridView1.FooterRow.Visible == false)
        {
            GridView1.Columns[8].Visible = true;
            GridView1.Columns[9].Visible = true;
            GridView1.Columns[10].Visible = true;
            GridView1.Columns[11].Visible = true;
            GridView1.Columns[12].Visible = true;
            GridView1.Columns[13].Visible = true;
            GridView1.Columns[14].Visible = true;
            GridView1.FooterRow.Visible = true;
            Add_Button.Text = "Cancel";
            Panel2.Visible = false;
        }
        else
        {
            GridView1.Columns[8].Visible = false;
            GridView1.Columns[9].Visible = false;
            GridView1.Columns[10].Visible = false;
            GridView1.Columns[11].Visible = false;
            GridView1.Columns[12].Visible = false;
            GridView1.Columns[13].Visible = false;
            GridView1.Columns[14].Visible = false;
            GridView1.FooterRow.Visible = false;
            Add_Button.Text = "Add New Record"; 
        }
    }
    

    【讨论】:

    • 去掉了多余的列,但第二次单击按钮(现在是取消按钮)时,页脚行仍然存在。我也想摆脱它。
    • 您是否尝试过调试并在Add_Button_Click 方法中设置断点?当您第二次单击该按钮时,Add_Button_Click 方法中的 else 块将被执行,因此由于以下语法,页脚行不应该可见:GridView1.FooterRow.Visible = false;else 块中。跨度>
    • 是的,我做到了,并意识到在事件发生后它会跳转到客户端,看起来它重新执行了 gridview,因为默认情况下页脚行是可见的,所以它保持这种状态。如果它在客户端设置为 false,它会做同样的事情,除了保持不可见。
    • If it was set to false in the client side 是什么意思?什么客户端?你有一些客户端/javascript代码来设置页脚行的可见性吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多