我在代码里动态生成了一个DATAGRIDVIEW DGV,一个DATASET DS.DS里有一个表"DATA".我把DGV.DATASOURSE=DS.TABLES["DATA"];
结果我想编辑DGV里的列时,却提示我索引超过什么什么的,不能为负或大于什么的.忘了.
DGV.COLUMNS[0].HEADERTEXT="ID' //这里出错了于是我显示了一下DS里的列数,显示结果为15列,我又显示了一下DGV里的列数,结果显示为0.奇怪了.但我DGV里的数据却是显示正常.是不是我哪里弄错了?还请高手指点.谢谢.

解决方案 »

  1.   

    你datagrid是如何绑定的啊?
    dgrd.datasource==DS.TABLES["DATA"];
    dgrd.databind();这个方法才是绑定数据的。
      

  2.   

    上面是一个=号,写错了;看起来像是你没有加绑定的函数:databind();
      

  3.   

    DGV.AutoGenerateColumns=true;
    DGV.DataSource=DS.Tables["DATA"];
      

  4.   

    自动生成列
    dataGridView1.AutoGenerateColumns = true;
    dataGridView1.DataSource = DS.Tables["DATA"];
      

  5.   

    DATAGRIDVIEW,不是DATAGRID.DATAGRIDVIEW里似乎没有DATABIND();
      

  6.   

    2个差不多,应该都有绑定数据的方法;你把DATAGRIDVIEW的列设成自动产生。dataGridView1.AutoGenerateColumns = true;
      

  7.   

    你是winform吧,如果是,DATAGRIDVIEW确实不需要databind()了;但是好像要加上排序吧:
    DATAGRIDVIEW1.Sort(DATAGRIDVIEW1.Columns[0],System.ComponentModel.ListSortDirection.Ascending);
      

  8.   

    会不会是别的原因呢?刚才我新建了一个项目,动态生成了一个DATAGRIDVIEW,然后用MESSAGEBOX.SHOW显示了一下DATAGRIDVIEW的AUTOGENERATECOLUMNS,结果显示DATAGRIDVIEW默认的就是TURE.
    而我在代码里并没有修改过AUTOGENERATECOLUMNS.并且我的DATAGRIDVIEW里的数据显示是正常的,包括列头的显示,都是正常的.
      

  9.   

    dgv[i] = new DataGridView();    //dgv和ds都是数组,前面已经定义过了,并且ds里也已经添加了数据.
                            dgv[i].DataSource = ds[i].Tables["查询数据"];
                            
                            dgv[i].AllowUserToAddRows = false;
                            dgv[i].AllowUserToDeleteRows = false;
                            dgv[i].AllowUserToResizeRows = false;
                            dgv[i].ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
                            dgv[i].ColumnHeadersVisible = true;
                            dgv[i].MultiSelect = false;
                            dgv[i].RowHeadersVisible = false;
                            dgv[i].SelectionMode = DataGridViewSelectionMode.FullRowSelect;
                            dgv[i].Size = new Size(743, 250);
                            dgv[i].AutoGenerateColumns = true;
                            MessageBox.Show(dgv[i].Columns.Count.ToString());  //0条记录
                            MessageBox.Show(ds[i].Tables["查询数据"].Columns.Count.ToString());  //15条记录
                            
                            //dgv[i].Columns[0].Visible = false;     //这里报错,"索引超出范围,必须为非负值并小于集合大小.索引指的是columns[0].因为dgv[i]能正常显示,dgv[i].tostring()也能显示出它是一个datagridview.
                                                    
                            flp.Controls.Add(dgv[i]);还请高手帮我看看,谢谢.
      

  10.   

    我最近也做过datagridview和数据库打交道的东西,是定义了datagridview里面的列,然后在添加到datagridview里面去,比如:
                 this.column_callID.DataPropertyName = "callID";
                this.column_callID.HeaderText = "客户号码";
                this.column_callID.Name = "column_callID";
                this.column_callID.ReadOnly = true;
                datagridview.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn [] {column_callID});
    注意一下,列的一个属性:DataPropertyName 它是用来设定与之对应的数据库中列的名字的,这样做是可以
    显示出来的,你可以试一试
     
      

  11.   

    问题已解决.我在仔细对比以前的代码时发现,以前都是先把DATAGRIDVIEW添加到PANEL后再修改其中的列,而这次我是想先修改完后再添加,结果导致错误.