【问题标题】:Hiding Columns in Gridview when grid view is empty当网格视图为空时在 Gridview 中隐藏列
【发布时间】:2013-11-13 12:27:11
【问题描述】:

我有一个网格视图,其中隐藏了一些列。当网格视图中至少有一项时,它给了我预期的结果,但是当我的网格为空时,它会显示隐藏的列。当没有记录时如何解决它意味着网格视图为空然后它还隐藏了已隐藏的列我正在隐藏网格的 OnitemDataBound(object sender, GridItemEventArgs e) 事件中的列。

【问题讨论】:

  • 听说过标点符号吗?
  • 兄弟请写一些代码作为例子。
  • 显然你没有。无论如何,我认为您也不了解 SO 的概念。你是应该首先发布代码的人......
  • 不,我只是刚开始开发……那是我要问的……
  • 那你应该read this 稍后再回来问一个真正的问题

标签: asp.net gridview


【解决方案1】:

将 Hidden 列数据放在 Gridview 的 DatakeysName 属性中。然后它不会显示任何列。你可以得到它以供进一步使用。如果要显示未找到数据消息,请设置 EmptyDataText="No Data Found!!!"。

【讨论】:

    【解决方案2】:

    假设如果没有来自服务器的数据,您想隐藏列名或类似的东西。您可以使用网格视图的空模板功能。转到设计器模式单击网格视图的快速属性。转到模板并选择空模板。然后写一些文本或消息,例如“未找到记录”。并运行代码。您不需要为此编写任何服务器端代码。

    【讨论】:

      【解决方案3】:

      应使用代码隐藏列。 1. 逻辑应该是我们遍历行并查看列是否没有所有行的值。 2.如果该列的值不存在,则将该列隐藏。 3.整个逻辑应该在prerender事件中实现。

      今晚我可以为您提供示例代码...

      这里是示例代码...

       protected void GridView1_PreRender(object sender, EventArgs e)
                  {
                      bool isColumnEmpty = true;
                      int columnIndex =2;
                      for (int i = 0; i < GridView1.Rows.Count; i++)
                      {
                          if (GridView1.Rows[i].Cells[columnIndex].ToString() != string.Empty)
                          {
                              isColumnEmpty = false;
                              break;
                          }
                      }
                      if (isColumnEmpty)
                      {
                          GridView1.Columns[columnIndex].Visible = false;
                      }
                  }
      

      完整代码示例 ASPX 代码:

      <form id="form1" runat="server">
          <div>
              <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                  onprerender="GridView1_PreRender">
                  <Columns>
                      <asp:BoundField DataField="dc1" HeaderText="Column - 1" />
                      <asp:BoundField DataField="dc2" HeaderText="Column - 2" />
                      <asp:BoundField DataField="dc3" HeaderText="Column - 3" />
                      <asp:BoundField DataField="dc4" HeaderText="Column - 4" />
                      <asp:BoundField DataField="dc5" HeaderText="Column - 5" />
                  </Columns>
              </asp:GridView>
          </div>
          </form>
      

      CS 代码:

       public partial class Default : System.Web.UI.Page
          {
              protected void Page_Load(object sender, EventArgs e)
              {
                  GridView1.DataSource = GetDataSet();
                  GridView1.DataBind();
              }
      
              private DataSet GetDataSet()
              {
                  DataSet ds = new DataSet();
                  DataTable dt = new DataTable();
      
                  DataColumn dc1 = new DataColumn("dc1");
                  DataColumn dc2 = new DataColumn("dc2");
                  DataColumn dc3 = new DataColumn("dc3");
                  DataColumn dc4 = new DataColumn("dc4");
                  DataColumn dc5 = new DataColumn("dc5");
      
                  dt.Columns.Add(dc1);
                  dt.Columns.Add(dc2);
                  dt.Columns.Add(dc3);
                  dt.Columns.Add(dc4);
                  dt.Columns.Add(dc5);
      
                  for (int i = 0; i < 10; i++)
                  {
                      DataRow dr = dt.NewRow();
                      dr[dc1] = i;
                      //dr[dc2] = "2" + i.ToString();
                      dr[dc3] = "3"+ i.ToString();
                      dr[dc4] = "4" + i.ToString();
                      dr[dc5] = "5" + i.ToString();
                      dt.Rows.Add(dr);
                  }
      
                  ds.Tables.Add(dt);
                  return ds;
              }
      
              protected void GridView1_PreRender(object sender, EventArgs e)
              {
                  bool isColumnEmpty = true;
                  int columnIndex =2;
                  for (int i = 0; i < GridView1.Rows.Count; i++)
                  {
                      if (GridView1.Rows[i].Cells[columnIndex].ToString() != string.Empty)
                      {
                          isColumnEmpty = false;
                          break;
                      }
                  }
                  if (isColumnEmpty)
                  {
                      GridView1.Columns[columnIndex].Visible = false;
                  }
              }
          }
      

      【讨论】:

      • 如果您觉得有帮助,请给答案评分...这将帮助遇到同样问题的其他人.. :) 谢谢..
      猜你喜欢
      • 1970-01-01
      • 2014-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 2015-12-25
      • 1970-01-01
      相关资源
      最近更新 更多