问题的目标:动态隐藏为空的字段,比如,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自己想出来的,呵呵,也算小有成就感一把。