0

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

4

3 回答 3

1

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

于 2013-11-13T12:31:36.623 回答
0

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

于 2013-11-13T13:10:42.303 回答
0

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

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

这是示例代码...

 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>

客服代码:

 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;
            }
        }
    }
于 2013-11-13T12:49:38.377 回答