Как получить базовый DataTable из элемента управления (то есть под DataGridView)? - PullRequest
0 голосов
/ 02 марта 2012
dataGridView1.DataSource = myDataSet1;
dataGridView1.DataMember = "SomeTable";

А теперь я хочу получить ссылку на DataTable из моего dataGridView1. Как то так:

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

Я знаю о BindingContext, но не смог найти способ вернуть ссылку на DataTable.


Понял.

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

Ответы [ 3 ]

1 голос
/ 02 марта 2012

вы назначаете набор данных в качестве источника данных для вашего вида сетки.Итак, строка ниже поможет вам.

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

Предполагая, что у вас есть только один набор данных в вашем наборе данных.Вы также можете использовать имя таблицы вместо индекса.

0 голосов
/ 02 марта 2012

Вы можете быть устойчивым (чтобы избежать нулевой ошибки) или рискнуть.

Короткая версия:

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

Более гибкий подход (не предполагая, что представление привязано к DataSet):

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

Очевидно, что вы можете проверить / проверить количество таблиц в наборе данных.

0 голосов
/ 02 марта 2012

Вы можете преобразовать его таким образом

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

Посмотрите на этот вопрос Как мне экспортировать GridView.DataSource в набор данных или набор данных?

...