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