首先动态添加了选项卡,
然后给每个选项卡里添加一个DataGridView 
用 DataGridView 显示数据
我在给DataGridView 指定数据源后,想隐藏掉其中的一列怎么做阿。。?foreach (DataRow dr in dtComputerType.Rows)
            {
                TabPage tabpag = new TabPage();         
                tabpag.Text = dr["CTName"].ToString();
                tabpag.Tag = dr["CTID"].ToString();                dtComputer = cManage.SelectComputer();      //查询得到电脑信息给DateTable                DataGridView dgvComputer = new DataGridView();      //实例一个dgv
                dgvComputer.Location = new Point(15,15);    //指定显示位置
                dgvComputer.Size = new Size(510, 250);      //指定大小                dgvComputer.DataSource = dtComputer;        //指定数据源
                
                dtComputer.DefaultView.RowFilter = "CTypeID=" + dr["ctid"].ToString();  //筛选                dgvComputer.Columns["CTypeID"].Visible = false;                tabpag.Controls.Add(dgvComputer);       //把dgv添加到面板里面
                                tbcArea.TabPages.Add(tabpag);   //把TabPag添加进来
            }这样子dgvComputer.Columns["CTypeID"].Visible = false;错了。

解决方案 »

  1.   

    dgvComputer.Columns["CTypeID"].Visible = false   这样错了吗,请检查是否有CTypeId这列,或者可以用索引替代,
    比如 dgvComputer.Columns[0].Visible=false
      

  2.   

    用下标的也错了,
    dgvComputer.Columns[0].Visible = false;
    索引超出范围。必须为非负值并小于集合大小。
    参数名: index用列名则是
    dgvComputer.Columns["CTypeID"].Visible = false; 
    未将对象引用设置到对象的实例。
      

  3.   

    估计是你绑定的表里面没有CTypeID字段吧
    dgvComputer.Columns["字段名"].Visible = false
     或者
    dgvComputer.Columns["列索引"].Visible = false
      

  4.   

    有这一列的,如果我不进行隐藏,是能正常显示的,用下标,换别的也是报那个错.
    dgvComputer.Columns[0].Visible = false; 
    索引超出范围。必须为非负值并小于集合大小。 
    参数名: index 
      

  5.   

    根本没有定义列啊,只创建了DataGridView对象,呵呵。
      

  6.   

    你的dtComputer估计就没有列,楼主检查一下,不然不会出现索引超出范围
      

  7.   

    你确定绑定的有数据?如果没有数据肯定没有列的,所以会报错.同样也有未将对象引用到实例化的错误 dtComputer.DefaultView.RowFilter = "CTypeID=" + dr["ctid"].ToString();  //筛选 
    这一句加一个条件
    if(!String.IsNullOrEmpty(dr["ctid"].ToString()))
       dtComputer.DefaultView.RowFilter = "CTypeID=" + dr["ctid"].ToString();  //筛选 
      

  8.   

    if(dgvComputer.Columns.count>0)
      dgvComputer.Columns[0].Visible = false; 
      

  9.   

    根据你的错误提示,,dgvComputer.Columns集合是空的dgvComputer.Columns["CTypeID"]得到null
    null.Visible=false;出现空指针错误……
      

  10.   

    数据源是空的,Columns就为空了
    自然就找不到Columns["CTypeID"]的值
    同样Columns[0]也是不存在的,所以会出现这一系列的错误
      

  11.   

    1. 
    void BindData()
            {
                this.GridView1.DataSource = ds;
                this.GridView1.DataBind();            this.GridView1.Columns[0].Visible = false;
            }
    建义楼主不要用自动生成列,直接
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
        <Columns>
        <asp:TemplateField HeaderText="Title" > 
        <ItemTemplate>
        <%# Eval("Title") %>
        </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField HeaderText="名称" DataField="Title" />
        </Columns>
        </asp:GridView>
      

  12.   

    可以,,,看了一下你的代码,在你调用dgvComputer.Columns["CTypeID"]的时候,具体的Column还没有产生。你试试把dgvComputer.Columns["CTypeID"].Visible = false;句改成dgvComputer.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dgvComputer_DataBindingComplete);然后加一个方法
    void dgvComputer_DataBindingComplete(object sender, EventArgs e)
    {
        ((DataGridView)sender).Columns["CTypeID"].Visible = false;
    }
      

  13.   

    哦,这个其实就是给DataGridView加事件,,由于是在运行时创建的控件,无法用窗体设计器添加事件,就要手动添加事件委托。。你可以打开XXXX.Designer.cs文件可以看到很多类似的语句。。