我正在使用gridview,它根据下拉列表中的选择从SQL数据库中提取数据。源表有六列用于选择的属性,但是根据所选择的内容,可能有一到六个空的列(所有空值)。当列是空的时,我想隐藏它,这样页面就不那么笨拙和混乱了。
我在过去的几天里一直在寻找答案,但到目前为止我发现的要么与隐藏的列相关,你知道这些列是空的我不知道,或者在我认为的SQL代码中删除它们如果在gridview代码中调用该列并且查询中不存在该列,则无效。
我是ASP.NET的新手,所以如果我的某些术语已经关闭,我很抱歉!如果您对我的要求有任何疑问,请与我联系。
提前感谢您的帮助!
答案 0 :(得分:4)
您为什么不在代码中添加所需的列,而不是隐藏空列?
检索要显示的数据时,您知道存在哪些列。您可以添加它们并在后面的代码中对它们进行数据绑定。
为了帮助您开始使用此功能,以下是helpful article中有关如何执行此操作的一些代码:
BoundField nameColumn = new BoundField();
nameColumn.DataField = "Name";
nameColumn.HeaderText = "Person Name";
GridView1.Columns.Add(nameColumn);
答案 1 :(得分:4)
你可以尝试:
Visible="false"
)Visible="true"
)RowDataBound方法看起来像这样:
void YourGridview_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
// if this is a SqlDataSource you can use DataRowView,
// otherwise use whatever type is used in the data source
DataRowView rowView = (DataRowView)e.Row.DataItem;
if (!String.IsNullOrEmpty(rowView["ColumnA"]))
YourGridview.Columns[0].Visible = true;
// repeat for your other columns
}
}
答案 2 :(得分:2)
为网络做到这一点的最佳方式:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI.WebControls;
namespace MyProject
{
public static class ExtensionGridView
{
public static GridView RemoveEmptyColumns(this GridView gv)
{
// Make sure there are at least header row
if (gv.HeaderRow != null)
{
int columnIndex = 0;
// For each column
foreach (DataControlFieldCell clm in gv.HeaderRow.Cells)
{
bool notAvailable = true;
// For each row
foreach (GridViewRow row in gv.Rows)
{
string columnData = row.Cells[columnIndex].Text;
if (!(string.IsNullOrEmpty(columnData) || columnData ==" "))
{
notAvailable = false;
break;
}
}
if (notAvailable)
{
// Hide the target header cell
gv.HeaderRow.Cells[columnIndex].Visible = false;
// Hide the target cell of each row
foreach (GridViewRow row in gv.Rows)
row.Cells[columnIndex].Visible = false;
}
columnIndex++;
}
}
return gv;
}
}
}
答案 3 :(得分:1)
而不是这段代码:
if (!String.IsNullOrEmpty(rowView["ColumnA"]))
YourGridview.Columns[0].Visible = true;
使用这个:
if (!String.IsNullOrEmpty(Convert.Tostring(rowView["ColumnA"])) )
YourGridview.Columns[0].Visible = true;
答案 4 :(得分:0)
在网格的 onItemBound 事件中,您可以检查要在列单元格中设置的变量的值并相应地设置其可见性