日期:2014-05-18  浏览次数:20785 次

DataGridView插入行的问题

程序共有三个窗体,窗体一提供文档浏览,定义查询条件,点击button,弹出窗体二;窗体二有一DataGridView控件,DataGridView中添加了3列未绑定DataGridViewButtonColumn,分别为添加、修改、删除,点击添加、修改时均弹出窗体3的实例,现修改、删除功能已正常;添加功能无法实现。
窗体1相关代码:
  Form2 f2 = new Form2();
  string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + textbox1.Text;
  f2.aa = strConn;
  OleDbConnection conn = new OleDbConnection(strConn);
  conn.Open();
  OleDbDataAdapter ad = new OleDbDataAdapter(strSQL, conn);
  DataTable dt = new DataTable();
  ad.Fill(dt);
  f2.DataGridView1.DataSource = dt.DefaultView;
  conn.Close();
  f2.Show();
  this.Hide();
问题:
1、当直接在DataGridView中直接添加行时,当控件被数据绑定时,无法以编程方式向 DataGridView 的行集合中添加行。
2、将DataGridView1.Rows.AddCopy(e.RowIndex);改成((DataTable)DataGridView1.DataSource).Rows.Add();
提示:无法将类型为“System.Data.DataView”的对象强制转换为类型“System.Data.DataTable”。
3、将((DataTable)DataGridView1.DataSource).Rows.Add();改为
DataTable dt = DataGridView1.DataSource as DataTable;
DataRow tpdr=dt.NewRow();//未将对象引用设置到对象的实例
提示:未将对象引用设置到对象的实例。
4、DataGridView1.DataSource as DataTable改为一行一列的放到DataTable里,第一次点添加按钮时正常,第二次时提示:名为“Column1”的列已属于此 DataTable;具体代码如下:
DataTable dt = new DataTable();
dt.TableName = "tptable";
   
//添加列
for (int i = 0; i < dgvYuan.Columns.Count; i++)
{
  dt.Columns.Add(dgvYuan.Columns[i].Name);//名为“Column1”的列已属于此 DataTable。
}
//添加行
for (int j = 0; j < dgvYuan.Rows.Count; j++)
{
  DataRow dr = dt.NewRow();
  for (int k = 0; k < dgvYuan.Columns.Count; k++)
  {
  dr[k] = dgvYuan.Rows[j].Cells[k].Value;
  }
  dt.Rows.Add(dr);
}  
DataRow tpdr = dt.NewRow();
tpdr["列名1"]=textbox1.text;
tpdr["列名2"]=textbox2.text;
tpdr["列名3"]=textbox3.text;
dt.Rows.InsertAt(tpdr, e.RowIndex);

求解决办法,最好能告知4个错点的具体原因,代码该如何写?


------解决方案--------------------
问题是下面这行
f2.DataGridView1.DataSource = dt.DefaultView;

直接绑定DataTable就行
f2.DataGridView1.DataSource = dt;
------解决方案--------------------
绑定数据集后,就不能通过Rows.Add添加行了,你可以在DataTable中增加行,然后绑定到grid
------解决方案--------------------
写进数据库很简单,是想要datagridview也有数据进去?
试试
DataRow row = dt.NewRow();
dt.Rows.InsertAt(row, 行号);