GridView OnDataBound 和 OnPreRender 事件的用途/好处是什么?

问题描述 投票:0回答:1

对于上下文,请继续阅读,但最终是否可以/(以及如何)在 OnDataBound() 或 OnPreRender() 事件中更新(删除/隐藏列)GridView?

我从数据库查询数据并将其显示在网格视图上。我使用 OnRowDataBound 事件来格式化数字等。在该结果集中,我有一个名为“orderby”的列,用于对结果行进行排序。我想从网格视图中删除此列。如果我自动生成列,我可以通过在 DataControlRowType.Header 和 DataControlRowType.DataRow 上执行以下操作 (e.Row.Cells[r].Visible = false;) 在 OnRowDataBound() 事件中隐藏此列。如果我不自动生成列,并且在 .aspx 的列参数中添加 hide="true",则它不起作用。我不是在 .aspx 中寻找解决方案顺便说一句...

出于某种原因,我认为 OnDataBound() 和 OnPreRender() 事件可用于更新 GridView(隐藏行、列、创建总行),但情况似乎并非如此。如果我尝试下面的方法,它不起作用(即使有数据,gridView.Columns.Count 也是 0)。如果我使用 OnRowDataBound() 事件,我可以获得所需的效果,但我想知道:

  1. OnDataBound() 和 OnPreRender() 事件可以更新 gridview 吗?如果是这样,请给我举一个例子。
  2. 您可以使用 OnDataBound() 和 OnPreRender() 做什么/它们有什么用处?我以前没有真正使用过它们,而且我再次认为它们能够帮助网格视图的最后一刻更新/修饰。 注意:OnRowDataBound() 方法逐行、逐列更新 柱子。对于复杂的页面,您很容易就会出现一些令人讨厌的长页面 代码。所以我想一旦所有这些都解决了 例如,这将是一种“轻松”隐藏列的方法;但我可以 错了...

顺便说一句,我正在运行:.Net 版本:4.0.30319.42000,运行时版本:.NET Framework 4.8.4645.0

    protected void checks_DataBound(object sender, EventArgs e)
    {
        GridView gridView = (GridView)sender;
        if (gridView.ClientID == "checks_db_sod01")
        {
            for (int c = 0; c < gridView.Columns.Count; c++)
            {
                if (gridView.Columns[c].HeaderText.ToLower().Trim() == "orderby")
                {
                    gridView.Columns[c].Visible = false;
                }
            }
        }
    }
c# asp.net gridview
1个回答
0
投票

您可能应该在每篇文章中提出一个问题,但是,为了解决您的具体问题:

  1. 是的,
    OnDataBound()
    OnPreRender()
    可以更新
    GridView
    的某些方面,例如数据格式化或应用样式。它们不用于结构变化,例如删除列;为此,您通常会直接操作 GridView 的属性或在 GridView 的初始化或数据绑定阶段处理此类任务。
  2. 这些事件用于格式化、应用样式、计算总计等。将其视为后处理。

不过,您可以使用 PreRender 来隐藏您的列。请注意,我已经使用 Web 表单大约 5 年了,但这可能会让您入门:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        // Initialize or bind your GridView here.
        // You can manipulate GridView columns before or after binding.
    }
}

protected void checks_DataBound(object sender, EventArgs e)
{
    // You can perform final adjustments to the GridView after data binding.
    // This could include formatting, styling, calculations...
}

protected void checks_PreRender(object sender, EventArgs e)
{
    var gridView = (GridView)sender;
    if (gridView.ClientID == "checks_db_sod01")
    {
        // Iterate through columns and hide the one with header text "orderby".
        foreach (DataControlField column in gridView.Columns)
        {
            if (column.HeaderText.ToLower().Trim() == "orderby")
            {
                column.Visible = false;
            }
        }
    }
}

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.