Как я могу экспортировать GridView.DataSource
в таблицу данных или набор данных?
Как экспортировать GridView.DataSource в таблицу данных или набор данных?
Ответы (7)
Вы должны сначала преобразовать DataSource
в BindingSource
, посмотрите пример
BindingSource bs = (BindingSource)dgrid.DataSource; // Se convierte el DataSource
DataTable tCxC = (DataTable) bs.DataSource;
С данными tCxC
можно делать что угодно.
Предполагая, что ваш DataSource имеет тип DataTable, вы можете просто сделать это:
myGridView.DataSource as DataTable
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 по "как"
Амбу,
У меня была та же проблема, что и у вас, и это код, который я использовал, чтобы понять это. Хотя я не использую раздел нижнего колонтитула для своих целей, я включил его в этот код.
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(" ","");
}
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(" ","");
}
dt.Rows.Add(dr);
}
Если вы делаете 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/
Я использовал строку кода ниже, и она работает, попробуйте это
DataTable dt = dataSource.Tables[0];
Это приходит поздно, но было весьма полезно. Я просто публикую для дальнейшего использования
DataTable dt = new DataTable();
Data.DataView dv = default(Data.DataView);
dv = (Data.DataView)ds.Select(DataSourceSelectArguments.Empty);
dt = dv.ToTable();