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

Как я могу экспортировать GridView.DataSource в таблицу данных или набор данных?


person ALEXALEXIYEV    schedule 24.04.2009    source источник
comment
каков тип объекта, на который указывает GridView.DataSource?   -  person Mitch Wheat    schedule 24.04.2009
comment
vbforums.com/showthread.php?t=474895   -  person TheTXI    schedule 24.04.2009


Ответы (7)


Вы должны сначала преобразовать DataSource в BindingSource, посмотрите пример

BindingSource bs = (BindingSource)dgrid.DataSource; // Se convierte el DataSource 
DataTable tCxC = (DataTable) bs.DataSource;

С данными tCxC можно делать что угодно.

person Marco Vinicio Gomez G.    schedule 15.12.2010

Предполагая, что ваш DataSource имеет тип DataTable, вы можете просто сделать это:

myGridView.DataSource as DataTable
person Kon    schedule 24.04.2009
comment
это лучший ответ на этот вопрос, спасибо - person MBH; 21.05.2015
comment
Я установил datagridview.DataSource = dataTable, но когда я хочу прочитать это из DataSource таким образом, сгенерировать недопустимое исключение приведения по msg: Unable to cast object of type 'System.Windows.Forms.BindingSource' to type 'System.Data.DataTable'. - person Behzad; 31.01.2016

Лично я бы пошел с:

DataTable tbl = Gridview1.DataSource as DataTable;

Это позволит вам проверить значение null, поскольку это приводит либо к объекту DataTable, либо к null. Преобразование его в качестве DataTable с использованием (DataTable)Gridview1.DataSource приведет к ошибке сбоя, если DataSource на самом деле является набором данных или даже какой-либо коллекцией.

Вспомогательная документация: Документация MSDN по "как"

person Tacoman667    schedule 24.04.2009
comment
Хотя это не вызвало никаких ошибок, когда я наводил курсор, чтобы проверить значение моей таблицы данных, оно показывает его как нулевое, хотя в моем представлении сетки отображаются заполненные данные. DataTable dt = gvJobSearchEngine.DataSource as DataTable; - person John Waclawski; 16.03.2017

Амбу,

У меня была та же проблема, что и у вас, и это код, который я использовал, чтобы понять это. Хотя я не использую раздел нижнего колонтитула для своих целей, я включил его в этот код.

    DataTable dt = new DataTable();

    // add the columns to the datatable            
    if (GridView1.HeaderRow != null)
    {

        for (int i = 0; i < GridView1.HeaderRow.Cells.Count; i++)
        {
            dt.Columns.Add(GridView1.HeaderRow.Cells[i].Text);
        }
    }

    //  add each of the data rows to the table
    foreach (GridViewRow row in GridView1.Rows)
    {
        DataRow dr;
        dr = dt.NewRow();

        for (int i = 0; i < row.Cells.Count; i++)
        {
            dr[i] = row.Cells[i].Text.Replace("&nbsp;","");
        }
        dt.Rows.Add(dr);
    }

    //  add the footer row to the table
    if (GridView1.FooterRow != null)
    {
        DataRow dr;
        dr = dt.NewRow();

        for (int i = 0; i < GridView1.FooterRow.Cells.Count; i++)
        {
            dr[i] = GridView1.FooterRow.Cells[i].Text.Replace("&nbsp;","");
        }
        dt.Rows.Add(dr);
    }
person Joseph    schedule 24.05.2011

Если вы делаете gridview.bind() в:

if(!IsPostBack)

{

//your gridview bind code here...

}

Затем вы можете использовать DataTable dt = Gridview1.DataSource as DataTable; в функции для получения данных.

Но я привязываю datatable к gridview, когда я нажимаю кнопку и записываю в документ Microsoft:

HTTP — это протокол без сохранения состояния. Это означает, что веб-сервер обрабатывает каждый запрос HTTP для страницы как независимый запрос. Сервер не сохраняет сведений о значениях переменных, которые использовались во время предыдущих запросов.

Если у вас такое же состояние, я рекомендую вам использовать Session для сохранения значения.

Session["oldData"]=Gridview1.DataSource;

После этого вы можете вспомнить значение при повторном постбэке страницы.

DataTable dt=(DataTable)Session["oldData"];

Ссылки: https://msdn.microsoft.com/en-us/library/ms178581(v=vs.110).aspx#Anchor_0

https://www.c-sharpcorner.com/UploadFile/225740/introduction-of-session-in-Asp-Net/

person 劉鎮瑲    schedule 20.07.2018
comment
@Джон Вацлавски, у меня такая же проблема, как и у тебя. Я нашел это решение, надеюсь, это поможет вам. - person 劉鎮瑲; 20.07.2018

Я использовал строку кода ниже, и она работает, попробуйте это

DataTable dt =  dataSource.Tables[0];
person RSB    schedule 12.07.2016

Это приходит поздно, но было весьма полезно. Я просто публикую для дальнейшего использования

DataTable dt = new DataTable();
Data.DataView dv = default(Data.DataView);
dv = (Data.DataView)ds.Select(DataSourceSelectArguments.Empty);
dt = dv.ToTable();
person sav    schedule 24.07.2015
comment
Когда я попробовал ваш код, у Data.DataView не было всплывающего окна IntelliSense. - person John Waclawski; 16.03.2017