Как я могу экспортировать GridView.DataSource в набор данных или набор данных? - PullRequest
39 голосов
/ 24 апреля 2009

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

Ответы [ 7 ]

48 голосов
/ 24 апреля 2009

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

myGridView.DataSource as DataTable
28 голосов
/ 15 декабря 2010

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

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

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

18 голосов
/ 24 апреля 2009

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

DataTable tbl = Gridview1.DataSource as DataTable;

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

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

8 голосов
/ 24 мая 2011

Амб,

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

    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);
    }
1 голос
/ 20 июля 2018

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

if(!IsPostBack)

{

//your gridview bind code here...

}

Затем вы можете использовать DataTable dt = Gridview1.DataSource as 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 / введение-оф-сессии-в-Asp-Net /

1 голос
/ 12 июля 2016

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

DataTable dt =  dataSource.Tables[0];
0 голосов
/ 24 июля 2015

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

DataTable dt = new DataTable();
Data.DataView dv = default(Data.DataView);
dv = (Data.DataView)ds.Select(DataSourceSelectArguments.Empty);
dt = dv.ToTable();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...