问题的目标:动态隐藏为空的字段,比如,Nominal Size一列没有数据,那么就隐藏它
代码实现bom_detail.aspx.cs
//Page_load事件的代码片断
protected void Page_load(object sender, EventArgs e)
{
//dynamic display columns
DataSet ds = new DataSet ();
string sGetdetails = "SELECT * FROM BOMGeneral";
string sConnect = "Data Source=servername;Initial Catalog=databasename;Uid=sa;Pwd=123";
SqlConnection con =new SqlConnection (sConnect );
con.Open ();
SqlDataAdapter da = new SqlDataAdapter (sGetdetails ,con);//因为可能会对数据库修改,我这里使用SqlDataAdapter
da.Fill(ds,"myTable");
//获取列(字段)的个数,和行的个数
//这里有一段小插曲,我在用C#的时候把[]全部写成了(),当然死活都不对啦!
//()是VB.Net的写法,汗自己一个先。。。。
int columncount = ds.Tables["myTable"].Columns.Count;
int rowcount = ds.Tables["myTable"].Rows.Count;
for(int j=0;j < columncount ;j++) // 遍历所有列,j为列,i为行
{
int count =0; //定义一个计数器,用以判别字段是否为空
for(int i=0;i<rowcount ;i++) //遍历所有行
{
if (Convert.IsDBNull(ds.Tables["myTable"].Rows[i][j]))
count++;
}
if (count == rowcount )
bomDetail.Columns[j].Visible = false; //bomDetail是Gridview的ID
}
con.Close();
}
OK啦!这段代码可以隐藏所有为空的字段。不过有个缺点:
在Gridview自动绑定数据的时候会读取数据库一次,page_load时又会读取一次,不知道有没有更好的方法可以避免。
虽然不是什么高妙的方法,但这是我自己没有google自己想出来的,呵呵,也算小有成就感一把。