2011-01-14 37 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的主數據源以外的其他位置,該怎麼辦?在DataBind之前,gridview是不是隻有一個數據源? – Fandango68 2016-02-10 04:42:57

+0

@ Fernando68:對不起,我不瞭解你的要求。也許最好創建一個真正的問題並提供所有必要的信息。然後我可以嘗試回答。你可以在這裏添加一個問題鏈接來通知我。 – 2016-02-10 08:17:49

1

您應該能夠將DataTable設置爲gridview的DataSource。 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; 
    }