2011-06-29 8 views
3

を取り込むことができませんでしたが、取得エラー、次のセルテンプレートを提供していないDataGridViewColumnのでは、私はDataTableのからの人口のDataGridView午前のDataGridView

At least one of the DataGridView control's columns has no cell template

private void PopulateGridView(DataTable dt) 
     { 

      if (dt != null) 
      { 
       dataGridView1.Columns.Clear(); 
       dataGridView1.DataSource = null; 

       foreach (DataColumn col in dt.Columns) 
       { 
        //Declare the bound field and allocate memory for the bound field. 
        DataGridViewColumn datacolumn = new DataGridViewColumn(); 

        //Initalize the DataField value. 
        datacolumn.DataPropertyName = col.ColumnName; 

        datacolumn.Name = col.ColumnName; 

        //Initialize the HeaderText field value. 
        datacolumn.HeaderText = col.ColumnName; 


        //Add the newly created bound field to the GridView. 
        this.dataGridView1.Columns.Add(datacolumn); // ** Error ** 
      } 

       //Initialize the DataSource 
       this.dataGridView1.DataSource = dt; 
      } 
+2

「this.dataGridView1.DataSource = dt;」を実行するだけで何が問題になりますか? – CatchingMonkey

答えて

4

あなたがエラーの自動作成新しいデータソースが提供されている場合、実行時に列をすることができ、表示されるのは、セルテンプレートが割り当てられていない基本列タイプDataGridViewColumnを追加するためです。 DataGridViewがこの列に新しいセルを割り当てようとすると、何をすべきか分からなくなります。

列の種類を定義するか、列のセルテンプレートをセルに設定するかを選択できます。

DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn(); 
datagridview1.Columns.Add(col); 

または

DataGridViewColumn col= new DataGridViewColumn(); 
DataGridViewTextBoxCell cell = new DataGridViewTextBoxCell(); 

col.CellTemplate = cell; 
datagridview1.Columns.Add(col); 

いくつかの利用可能な列の種類があります。

あなたがしたいことは、列が自動生成されるようにすることです。 DataGridViewプロパティAutoGenerate列をtrue(デフォルト)に設定すると、データソースを割り当てるときに列が作成されます。

プログラムで列を追加すると便利です(たとえば、行を選択できるようにチェックボックス列を追加するなど)が、この場合は必要ありません。

2

あなたのコードがクラッシュ...

多分あなたがしたいですそれらの1つを使用するには?一方、

DataGridViewButtonColumn 
DataGridViewCheckBoxColumn 
DataGridViewComboBoxColumn 
DataGridViewImageColumn 
DataGridViewLinkColumn 
DataGridViewTextBoxColumn 

(代わりにベースDataGridViewColumnの)... DataGridViewのは...

3

ASPMapperのように、元の質問の下のコメントには、ちょうどそれを設定してください。あなたも手前に列をクリアする必要はありません。

private void PopulateGridView(DataTable dt) 
{ 
    dataGridView1.DataSource = dt; 
    // notice if your DataTable is null, it simply clears the DataGridView control 
} 
1
private void PopulateGridView(DataTable dt) 
{ 


    if (dt != null) 
    { 
     dataGridView1.Columns.Clear(); 
     dataGridView1.DataSource = null; 

     dataGridView1.AutoGenerateColumns = true; 

     this.dataGridView1.DataSource = dt; 
      } 
     } 
} 
} 

私のために仕事をしています。

関連する問題