2011-01-14 5 views
2

У меня есть DataTable, где столбцы генерируются программно во время выполнения. Затем я привязываю этот DataTable к GridView. Мне интересно, как я могу создать GridView для этого, и если это невозможно, то как я могу вывести DataTable в хорошо отформатированный HTML.Создание GridView с столбцами, сгенерированными во время выполнения

ответ

8

Для этой цели GridView имеет AutogenerateColums -property. Вы также могли бы генерировать столбцы на лету, например:

VB.NET

Dim tbl As New DataTable 
tbl.Columns.Add("ID", GetType(Int32)) 
tbl.Columns.Add("Name", GetType(String)) 
tbl.Columns.Add("Birthday", GetType(Date)) 
Dim pers As DataRow = tbl.NewRow 
pers("ID") = 1 
pers("Name") = "Tim" 
pers("Birthday") = New Date(1973, 6, 9) 

использования AutoGenerateColumns позволить сетки генерировать сам столбец:

Me.GridView1.AutoGenerateColumns = True 
Me.GridView1.DataSource = tbl 
Me.GridView1.DataBind() 

или генерировать столбцы динамически

For Each col As DataColumn In tbl.Columns 
    Dim field As New BoundField 
    field.DataField = col.ColumnName 
    field.HeaderText = col.ColumnName 
    GridView1.Columns.Add(field) 
Next 

C#

foreach (DataColumn col in dt.Columns) 
{  
    BoundField field = new BoundField(); 
    field.DataField = col.ColumnName; 
    field.HeaderText = col.ColumnName; 
    GridView1.Columns.Add(field); 
} 
+0

Что делать, если источник данных для новых столбцов поступает откуда-то, кроме основного источника данных GridView? Разве gridview не должен иметь только один источник данных перед DataBind? – Fandango68

+0

@ Fernando68: извините, я не понимаю ваши требования. Может быть, лучше всего создать реальный вопрос и предоставить всю необходимую информацию. Тогда я могу попытаться ответить. Вы можете добавить ссылку на вопрос здесь, чтобы сообщить мне. –

+0

http://stackoverflow.com/questions/35307156/gridview-how-to-add-columns-based-on-data-from-a-separate-data-source – Fandango68

1

Вы должны просто установить DataTable в качестве источника данных gridview. GridView имеет свойство AutoGenerateColumns. Перед выполнением привязки убедитесь, что он установлен на true или предварительно создает столбцы вручную.

1

Просто потому, что другие ответы не охватывают это, вот как программно настроить GridView с настраиваемыми столбцами.

private GridView SetUpGrid() 
    { 
     GridView GView = new GridView(); 

     GView .ColumnHeaderToolTip = "MyToolTip"; 

     GridViewColumn gvc1 = new GridViewColumn(); 
     gvc1.DisplayMemberBinding = new Binding("Col1Name"); 
     gvc1.Header = "Column One"; 
     gvc1.Width = Double.NaN; // Auto-Size 
     GView .Columns.Add(gvc1); 
     GridViewColumn gvc2 = new GridViewColumn(); 
     gvc2.DisplayMemberBinding = new Binding("Col2Name"); 
     gvc2.Header = "Column Two"; 
     gvc2.Width = Double.NaN; 
     GView .Columns.Add(gvc2); 
     GridViewColumn gvc3 = new GridViewColumn(); 
     gvc3.DisplayMemberBinding = new Binding("Col3Name"); 
     gvc3.Header = "Column Three"; 
     gvc3.Width = Double.NaN; 
     GView .Columns.Add(gvc3); 
     GridViewColumn gvc4 = new GridViewColumn(); 
     gvc4.DisplayMemberBinding = new Binding("Col4Name"); 
     gvc4.Header = "Column Four"; 
     gvc4.Width = Double.NaN; 
     GView .Columns.Add(gvc4); 

     return GView; 
    } 
+1

GridViewColumn не существует для веб-элементов управления. – Fandango68

Смежные вопросы