2011-01-14 11 views
2

実行時に列がプログラムによって生成されるDataTableがあります。次に、このDataTableをGridViewにバインドします。私が思っているのは、これに対応するためにGridViewをどのように作成できるのか、それが不可能な場合、DataTableをうまくフォーマットされたHTMLに出力する方法です。実行時に生成された列を含むGridViewの作成

答えて

8

GridViewには、この目的のためにAutogenerateColumsプロパティがあります。また、例えば、その場で列を生成することができ :

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より前にデータソースを1つしか持たないのですか? – 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の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; 
    } 
+1

WebコントロールのGridViewColumnは存在しません。 – Fandango68

関連する問題