.net 无法将对象强制转换

来源:百度知道 编辑:UC知道 时间:2024/05/29 19:27:19
这是datagridview 里面修改的代码,运行后出现"无法将类型为“System.Windows.Forms.BindingSource”的对象强制转换为类型“System.Data.DataTable”" 提示错误的代码行是: dtShow = (DataTable)this.dataGridView1.DataSource;

private DataTable dbconn(string strSql)
{
string strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\\asp.net\\datatest\\datatest\\pvk00.mdb;";
conn = new OleDbConnection(strConnection);
conn.Open();
this.adapter = new OleDbDataAdapter(strSql, conn);
DataTable dtSelect = new DataTable();
int rnt = this.adapter.Fill(dtSelect);
conn.Close();
return dtSelect;
}

private void button1_Click(object sender, EventArgs e)
{
if (dbUpdate())
{
MessageBox.Show("修改成功!");
}
}

提示说的很清楚了,这2个类型无法转换.
你的DataSource怎么来的?
直接从DataSource的来源获得datatable就行了。

dtShow = (DataTable)this.dataGridView1.DataSource.datatable(0);

很少见有这么写C#的.
dtShow = (DataTable)this.dataGridView1.DataSource;
for (int i = 0; i < dtShow.Rows.Count; i++)
{
dtUpdate.ImportRow(dtShow.Rows[i]);
}

去掉dtShow = (DataTable)this.dataGridView1.DataSource;
改成

for (int i = 0; i < this.dataGridView1.Rows.Count; i++)
{
dtUpdate.ImportRow(this.dataGridView1.Rows[i]);
}

你应该让等号两边的类型一样,因为dataGridView1.DataSource没有事前声明数据源,而且它的数据源不一定是什么类型

你之前不是声明了一个获取DataTable dbconn(string strSql)的方法嘛
你直接用这么一句话就行了

dtShow=dbconn(strSql)

private DataSet dbconn(string strSql)
{
conn = new OleDbConnection(strConnection);
conn.Open();
adapter = new OleDbDataAdapter(strSql, conn);
DataSet ds = new DataSet();
adapter.Fill(