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

问题描述:

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

现在我想从我的dataGridView1得到REFFERENCE到数据表背。 事情是这样的:如何从控件(即DataGridView下)获取底层DataTable?

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

我知道BindingContext中的,却找不到让数据表REFFERENCE回来的路上。


明白了。

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

设定数据集作为数据源,并试图让数据表.... – Reniuz 2012-03-02 11:50:35

+1

我也提供了一个数据成员指向一个特定的表中的数据集 – Excelan 2012-03-02 12:03:42

您正在将Dataset作为数据源分配给您的gridview。所以,下面这行会帮助你。

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

假设在数据集中只有一个数据表。你也可以使用你的表名来代替索引。

你可以是弹性

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

看其转换以这种方式(以避免空的错误),或采取一个机会。

短的版本是:

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

更有弹性的方法(未假设视图绑定到数据集):

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

显然可以检查/检查表的数量DataSet。