如何从控件(即在DataGridView下)获取底层DataTable?

时间:2012-03-02 11:46:25

标签: c# winforms datasource

dataGridView1.DataSource = myDataSet1;
dataGridView1.DataMember = "SomeTable";

现在我想从dataGridView1获取DataTable的引用。 像这样:

DataTable dt = (DataTable)dataGridView1.DataSource... ;

我知道BindingContext,但找不到恢复DataTable引用的方法。


知道了。

DataSet dataSet = (DataSet)dataGridView1.DataSource;
string tableName = dataGridView1.DataMember;
DataTable dt =dataSet.Tables[tableName];

3 个答案:

答案 0 :(得分:1)

您要将数据集作为数据源分配给gridview。所以,下面这行可以帮助你。

DataTable dt = ((DataSet)dataGridView1.DataSource).Tables[index];

假设数据集中只有一个数据表。您也可以使用表名而不是索引。

答案 1 :(得分:0)

你可以用这种方式转换它

BindingSource bs = (BindingSource )dgrid.DataSource;
DataTable tCxC = (DataTable ) bs.DataSource

看看这个问题How can I export a GridView.DataSource to a datatable or dataset?

答案 2 :(得分:0)

你可以有弹性(避免空错误)或冒险。

简短版本是:

DataTable dt = ((DataSet) dataGridView1.DataSource).Tables[0];

更具弹性的方法(不假设视图绑定到DataSet):

DataSet ds = dataGridView1 as DataSet;  
if (ds != null)  DataTable dt = ds.Tables[0];  

显然,您可以检查/检查DataSet中的表数。