#c# #asp.net #gridview
#c# #asp.net #gridview
Вопрос:
Привет, ребята, у меня есть эта функция, которая динамически создает просмотры сетки и добавляет ее на страницу. Источник данных также устанавливается динамически с использованием datatable. Я хочу установить текст строки заголовка в соответствие с именем таблицы datatable. Но следующее не работает:
private void AddGridview(DataTable dt)
{
if (dt.Rows.Count > 0)
{
GridView gridView = new GridView();
gridView.CssClass = "gridview";
gridView.DataSource = dt;
gridView.AutoGenerateColumns = false;
gridView.ShowHeader = true;
gridView.HeaderRow.Cells[0].Text = dt.TableName;
remittance.Controls.Add(gridView);
}
}
В строке 39 выдается следующая ошибка:
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
Line 37: gridView.AutoGenerateColumns = false;
Line 38: gridView.ShowHeader = true;
Line 39: gridView.HeaderRow.Cells[0].Text = dt.TableName;
Line 40: remittance.Controls.Add(gridView);
Line 41: }
Есть идеи, как это сделать?
Заранее спасибо.
Комментарии:
1. Просмотр сетки. Заголовок строки. Ячейки[0]. Text = dt.TableName; это не работает, возможно, потому, что вы не вызвали метод DataBind. GridView.DataBind();
2. я даже пробовал это, но теперь это не показывает ошибку, а также не устанавливает заголовок
Ответ №1:
Вместо
gridView.HeaderRow.Cells[0].Text = dt.TableName;
используйте это
gridView.Columns[0].HeaderText = dt.TableName;
Обновить:
private void AddGridview(DataTable dt)
{
if (dt.Rows.Count > 0) {
GridView gridView = new GridView();
gridView.CssClass = "gridview";
gridView.DataSource = dt;
gridView.DataBind();
gridView.AutoGenerateColumns = false;
gridView.HeaderRow.Visible = false;
Table table = gridView.Controls(0);
GridViewRow gvRow = new GridViewRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal);
TableCell newCell = new TableCell();
newCell.ColumnSpan = dt.Columns.Count - 1;
newCell.Text = dt.TableName;
gvRow.Cells.Add(newCell);
table.Rows.AddAt(0, gvRow);
remittance.Controls.Add(gridView);
}
}
Комментарии:
1. я хочу установить заголовок всего gridview, а не столбцов.
2. Я попробовал следующее, но получаю ошибку преобразования в таблице table = GridView. Элементы управления (0);
3. вы уверены, что скопировали это правильно? Я только что протестировал код, и он работает. Отредактировал мой пост, включил всю функцию.
4. Я уверен на 100%, потому что в этой строке написано «Не удается неявно преобразовать элемент управления типом в таблицу». Нужно ли мне явно приводить его?
5. хм, попробуй. Я пробовал это в VB.NET это работает нормально, просто преобразовал код в C#
Ответ №2:
сначала вам нужно добавить столбцы
foreach(var col in table.Columns)
gridview1.Columns.add(table.ColumnName);
Комментарии:
1. столбцы уже существуют в datatable, и когда я устанавливаю источник данных в datatable, отображаются все столбцы