DataGridView dgv = new DataGridView();
dgv.Size = new Size(200, 200);
dgv.Location = new Point(0, 30);
OleDbConnection conn = new OleDbConnection(connString);
conn.Open();
string sqlstrr = @"select * from bxxd"; OleDbDataAdapter da = new OleDbDataAdapter(sqlstrr, conn); DataSet ds = new DataSet(); da.Fill(ds, "bxxd");
dgv.Columns[0].HeaderText = "单号";
dgv.Columns[1].HeaderText = "名称";
dgv.Columns[2].HeaderText = "型号";
dgv.Columns[3].HeaderText = "单价";
dgv.Columns[4].HeaderText = "数量";
dgv.Columns[5].HeaderText = "日期";
dgv.Columns[6].HeaderText = "tttt";
dgv.AutoGenerateColumns = true;
dgv.DataSource = ds.Tables["bxxd"];
this.Controls.Add(dgv);运行时在 dgv.Columns[0].HeaderText = "单号";处出错“索引超出范围。必须为非负值并小于集合大小。参数名: index”
将这几句定义的列标题注释掉,表按字段名可以显示,将dgv.AutoGenerateColumns = true;值改为false.同样出错。
如果是从工具箱中拖出的dataGridView,同样的代码却可以通过,自定义的列标题能显示。真的不明白,为什么动态生成的控件,这样定义的列标题不能显示。拖出的却能显示。是错在那里,还请高手指出。用的是VS2008
dgv.Size = new Size(200, 200);
dgv.Location = new Point(0, 30);
OleDbConnection conn = new OleDbConnection(connString);
conn.Open();
string sqlstrr = @"select * from bxxd"; OleDbDataAdapter da = new OleDbDataAdapter(sqlstrr, conn); DataSet ds = new DataSet(); da.Fill(ds, "bxxd");
dgv.Columns[0].HeaderText = "单号";
dgv.Columns[1].HeaderText = "名称";
dgv.Columns[2].HeaderText = "型号";
dgv.Columns[3].HeaderText = "单价";
dgv.Columns[4].HeaderText = "数量";
dgv.Columns[5].HeaderText = "日期";
dgv.Columns[6].HeaderText = "tttt";
dgv.AutoGenerateColumns = true;
dgv.DataSource = ds.Tables["bxxd"];
this.Controls.Add(dgv);运行时在 dgv.Columns[0].HeaderText = "单号";处出错“索引超出范围。必须为非负值并小于集合大小。参数名: index”
将这几句定义的列标题注释掉,表按字段名可以显示,将dgv.AutoGenerateColumns = true;值改为false.同样出错。
如果是从工具箱中拖出的dataGridView,同样的代码却可以通过,自定义的列标题能显示。真的不明白,为什么动态生成的控件,这样定义的列标题不能显示。拖出的却能显示。是错在那里,还请高手指出。用的是VS2008
dgv.Columns[0]
....
放到
DataSource=ds.Tables["bxxd"];
dgv.DataBind();
下面试试~
dgv.Columns[0]
....
放到
DataSource=ds.Tables["bxxd"];
dgv.DataBind();
下面试试~
试过了,不行
dgv.Size = new Size(200, 200);
dgv.Location = new Point(0, 30);
OleDbConnection conn = new OleDbConnection(connString);
conn.Open();
string sqlstrr = @"select xx as 单号,xx as 名称,....,xx as tttt from bxxd"; OleDbDataAdapter da = new OleDbDataAdapter(sqlstrr, conn); DataSet ds = new DataSet(); da.Fill(ds, "bxxd");
'dgv.Columns[0].HeaderText = "单号";
'dgv.Columns[1].HeaderText = "名称";
'dgv.Columns[2].HeaderText = "型号";
'dgv.Columns[3].HeaderText = "单价";
'dgv.Columns[4].HeaderText = "数量";
'dgv.Columns[5].HeaderText = "日期";
'dgv.Columns[6].HeaderText = "tttt";
dgv.AutoGenerateColumns = true;
dgv.DataSource = ds.Tables["bxxd"];
this.Controls.Add(dgv);
dgv.Size = new Size(200, 200);
dgv.Location = new Point(0, 30);
OleDbConnection conn = new OleDbConnection(connString);
conn.Open();
string sqlstrr = @"select * from bxxd"; OleDbDataAdapter da = new OleDbDataAdapter(sqlstrr, conn); DataSet ds = new DataSet();
da.Fill(ds, "bxxd");
dgv.AutoGenerateColumns = true;
dgv.DataSource = ds.Tables["bxxd"];
dgv.Columns[0].HeaderText = "单号";
dgv.Columns[1].HeaderText = "名称";
dgv.Columns[2].HeaderText = "型号";
dgv.Columns[3].HeaderText = "单价";
dgv.Columns[4].HeaderText = "数量";
dgv.Columns[5].HeaderText = "日期";
dgv.Columns[6].HeaderText = "tttt";
this.Controls.Add(dgv);
调整了一下顺序,试试看
你看看 那后面生成了多少 DataGridViewRow的对象,然后把这些对象都加入到那个DataGridView中了
你自己这个所谓动态的 就没有上面的操作
虽说那个文件是最好不要改的 但是里面的代码还是要看看的 至少知道 咱手动托控件的时候 微软自动生成了多少东西
你想动态的话 那么这些对象你也得生成出来了 按照它自动生成的写法 写到你动态添加的代码那块
2、你的错误在于datagridview 在初始化后,并没有生成对应的Columns 集合,这样就去绑定,是错误的
3、待调整完顺序后,将this.AutoGenerateColumns = false;
4、并保证你的select * from table 的查询结果仅有7列;
this.SuspendLayout();
private System.Windows.Forms.DataGridViewTextBoxColumn Column1;
private System.Windows.Forms.DataGridViewTextBoxColumn Column2;
private System.Windows.Forms.DataGridViewTextBoxColumn Column3;
private System.Windows.Forms.DataGridViewTextBoxColumn Column4;
private System.Windows.Forms.DataGridViewTextBoxColumn Column5;
private System.Windows.Forms.DataGridViewTextBoxColumn Column6; //
// Column1
//
this.Column1.HeaderText = "Column1";
this.Column1.Name = "Column1";
//
// Column2
//
this.Column2.HeaderText = "Column2";
this.Column2.Name = "Column2";
//
// Column3
//
this.Column3.HeaderText = "Column3";
this.Column3.Name = "Column3";
//
// Column4
//
this.Column4.HeaderText = "Column4";
this.Column4.Name = "Column4";
//
// Column5
//
this.Column5.HeaderText = "Column5";
this.Column5.Name = "Column5";
//
// Column6
//
this.Column6.HeaderText = "Column6";
this.Column6.Name = "Column6";
//
// frm_DataGridView
// this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.Column1,
this.Column2,
this.Column3,
this.Column4,
this.Column5,
this.Column6});
this.ResumeLayout(false);上述原来动态生成的代码 现在就是你要动态添加的代码
'dgv.Columns[0].HeaderText = "单号";
.......
在查询语句中as是可以,不过我那样做为什么不行?
string[] str = new string[] { "a", "b", "c"}
for(int i=0;i<7;i++)
{
dgv.Columns[i].HeaderText = str[i];
}
也是一样的错误;