当网格视图为空时隐藏Gridview中的列

时间:2013-11-13 12:27:11

标签: asp.net gridview

我有一个网格视图,我隐藏了一些列。当网格视图中至少有一个项目但是当我的网格为空时它显示隐藏的列时,它给出了我预期的结果。怎么解决它没有记录意味着网格视图是空的,那么它也隐藏了隐藏的列我隐藏在OnitemDataBound(对象发送者,GridItemEventArgs e)网格事件中的列。

3 个答案:

答案 0 :(得分:1)

将隐藏列数据放在Gridview的DatakeysName属性中。然后它不会显示任何列。您可以将其用于进一步使用。如果要显示没有找到数据的消息,请设置EmptyDataText =“No Data Found !!!”。

答案 1 :(得分:0)

应使用代码隐藏列。 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;
            }
        }
    }

答案 2 :(得分:0)

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