Asp.net 当网格视图为空时隐藏网格视图中的列
我有一个网格视图,其中隐藏了一些列。当网格视图中至少有一个项目,但当我的网格为空时,它会显示隐藏列时,它会给出预期的结果。当没有记录时如何解决此问题意味着网格视图为空,那么它也会隐藏隐藏的列我正在网格的OnitemDataBound(对象发送者,GridItemEventArgs e)事件中隐藏列。将隐藏列数据放入Gridview的DataKeyName属性中。然后它将不显示任何列。你可以得到它,以便进一步使用。如果要显示“未找到数据”消息,请设置EmptyDataText=“未找到数据!!!”该列应使用代码隐藏。 1.逻辑应该是这样的:我们循环行,看看列是否没有所有行的值。 2.如果仅列的值不存在,则隐藏该列。 3.整个逻辑应该在prerender事件中实现 今晚我可以给你提供示例代码 下面是示例代码Asp.net 当网格视图为空时隐藏网格视图中的列,asp.net,gridview,Asp.net,Gridview,我有一个网格视图,其中隐藏了一些列。当网格视图中至少有一个项目,但当我的网格为空时,它会显示隐藏列时,它会给出预期的结果。当没有记录时如何解决此问题意味着网格视图为空,那么它也会隐藏隐藏的列我正在网格的OnitemDataBound(对象发送者,GridItemEventArgs e)事件中隐藏列。将隐藏列数据放入Gridview的DataKeyName属性中。然后它将不显示任何列。你可以得到它,以便进一步使用。如果要显示“未找到数据”消息,请设置EmptyDataText=“未找到数据!!!”
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;
}
}
受保护的void GridView1\u预渲染(对象发送方,事件参数e)
{
bool isColumnEmpty=true;
int-columnIndex=2;
对于(int i=0;i
完整代码示例
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;
}
}
}
public部分类默认值:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
GridView1.DataSource=GetDataSet();
GridView1.DataBind();
}
私有数据集GetDataSet()
{
数据集ds=新数据集();
DataTable dt=新的DataTable();
DataColumn dc1=新的DataColumn(“dc1”);
DataColumn dc2=新的DataColumn(“dc2”);
DataColumn dc3=新的DataColumn(“dc3”);
DataColumn dc4=新的DataColumn(“dc4”);
DataColumn dc5=新的DataColumn(“dc5”);
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
dt.Columns.Add(dc3);
dt.Columns.Add(dc4);
dt.Columns.Add(dc5);
对于(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);
返回ds;
}
受保护的void GridView1_预渲染(对象发送方,事件参数e)
{
bool isColumnEmpty=true;
int-columnIndex=2;
对于(int i=0;i
假设没有来自服务器的数据,您希望隐藏列名或类似的内容。可以使用栅格视图的空模板功能。转到设计器模式,单击栅格视图的“快捷”属性。转到模板并选择空模板。然后写一些文本或消息,比如“找不到记录”,然后运行代码。您不需要为此编写任何服务器端代码 听说过标点符号吗?兄弟,请写一些代码作为例子。显然你没有。不管怎么说,我认为你也不理解这个概念。你是第一个应该发布代码的人…不,我只是刚刚开始开发…这就是我在问的…然后你可能应该稍后回来,提出一个真正的问题如果你觉得有帮助,请对答案进行评分。。。这将帮助其他有同样问题的人:)谢谢