面对GridView.Columns.Count为0的问题

来源:互联网 发布:吴宗宪淘宝直播回放 编辑:程序博客网 时间:2024/04/29 11:44

好久没有用纯ADO.NET进行开发了,近日重操旧码,想来个温故而知新,就做了几个小Demo.其中一个简单的应用就是把一个DataTable简单的绑定到GridView,把数据显示出来.数据绑定之后,我惯性的想屏蔽掉部分Columns和设置一些Columns属性,可问题就来了,调用GridView.Columns[0]时竟然抛出边界错误,一查GridView.Columns.Count,莫大的一个0跃然纸上,开始当然是以为自己的代码有问题,反复检查后,确信一点问题都没有,驱猫上网百一下和G一下,发现遇到这个问题的朋友还不少.

原来服务器端DataSet或者DateTbale之流绑定给GridView之后,GridView只会按照字段的顺序显示所有列,此时无论GridView的AutoGenerateColumns属性启用还是不启用,Columns对象的Count将为0,因为GridView还是会自动生成的列,而自动生成列是不会放入到Columns集合中去的.

没有办法了,锅穿洞就自己补补咯,难道要饿着等MS爷爷给你饭吃么.其实做法也很简单,写个动态添加Columns函数就行了吧.

 

    /// <summary>
    
/// 动态生成GridView的Columns
    
/// </summary>
    
/// <param name="gv"></param>
    
/// <param name="dt"></param>
    
/// <returns></returns>

    public static GridView dynamicGenerateColumns(GridView gv, DataTable dt)
    
{
        
// 把GridView的自动产生列设置为false,否则会出现重复列
        gv.AutoGenerateColumns = false;

        
// 清空所有的Columns
        gv.Columns.Clear();

        
// 遍历DataTable 的每个Columns,然后添加到GridView中去
        foreach (DataColumn item in dt.Columns)
        
{
            BoundField col 
= new BoundField();
            col.HeaderText 
= item.ColumnName;
            col.DataField 
= item.ColumnName;
            col.Visible 
= true;
            gv.Columns.Add(col);
        }

        
return gv;
    }

添加完Columns,就可以舒心的用GridView.Columns[index]进行操作了,操作完还是来两句DataSource和DataBind,目的即可达到 

原创粉丝点击