2016-06-14 66 views
1

DataGridViewButtonColumnにいくつかのテキストを表示する必要があります。私はSOでこれらについてよく似た質問をたくさん読んだ。それらの多くは私にはないUseColumnTextForButtonValueからTrueの設定を推奨しています。奇妙なことに、Microsoftは少なくともrowを持つようにして、ボタンにテキストが表示されるようにします。C#datagridviewbuttoncolumn表示されないテキスト

次は私のコードです:しかし

 dataGridView1.ColumnCount = 2; 
     dataGridView1.Columns[0].Name = "a"; 
     dataGridView1.Columns[1].Name = "b"; 

     ArrayList row = new ArrayList(); 
     row.Add("1"); 
     row.Add("2"); 
     dataGridView1.Rows.Add(row.ToArray()); 

     DataGridViewButtonColumn btn = new DataGridViewButtonColumn(); 
     btn.Name = "text"; 
     btn.UseColumnTextForButtonValue = true; 
     dataGridView1.Columns.Add(btn); 

このコードは動作しますが、:ここで動作するコード

:このコードは、DataGridViewButtonColumn上のテキストを表示しませdoesnの

 DataGridViewButtonColumn EditColumn = new DataGridViewButtonColumn(); 
     EditColumn.HeaderText = "Complete"; 
     EditColumn.Name = "Complete"; 
     EditColumn.UseColumnTextForButtonValue = True; 
     dataGridView.Columns.Add(EditColumn); 

データベースからデータを取得していますので、ここではdataGridView.Rows.Add(row.ToArray())を使用しません。では、テキストをDataGridViewButtonColumnに表示させるにはどうすればよいですか?

+0

[このスタックオーバーフロー](http://stackoverflow.com/questions/30256811/datagridview-button-text-not-appearing-despite-usecolumntforforbuttontext-set-to) –

+0

[こちら](https:// social.msdn.microsoft.com/Forums/windows/en-US/64110c71-aa5c-40b4-a22f-ed800c603392/showing-text-on-the-buttons-in-datagridviewbuttoncolumn-c?forum=winformsdatacontrols)方法バインディング – TaW

答えて

1

あなたが解決するには、2つの問題を抱えて:

  • どうバインドDataSourceは、デフォルトの列の型だけでなく、1つ(またはそれ以上)だけではないの作成にする方法DataSource
  • からButton列のボタン列を

enter image description here

最初の問題は基本的に列のDataPropertyNameを設定することで解決されます。

しかし、自動的に作成されたColumnTypesにどのように影響するかわかりません。

ので、私は回避策を提案する:代わりに、私たちは少しのヘルパー機能でそれを自分自身を行うことができますAutoGenerateColumnsに頼るので:

これは列をクリアしDataTableの各列のための新しいものを作成し、プロパティを使用してテーブルの列の我々はスペースで囲まれた列名を持つ文字列を渡すのボタンになりたいどの列(複数可)、それを伝えるために:

void CreateSpecialColumns(DataTable dt, DataGridView dgv, string buttons) 
{ 
    dgv.Columns.Clear(); 

    for (int i = 0; i < dt.Columns.Count; i++) 
    { 
     DataColumn dc = dt.Columns[i]; 
     if (buttons.Contains(" " + dc.ColumnName + " ")) 
     { 
      DataGridViewButtonColumn buttonColumn = new DataGridViewButtonColumn(); 
      buttonColumn.HeaderText = dc.Caption; 
      buttonColumn.Name = dc.ColumnName; 
      buttonColumn.ValueType = dc.DataType; 
      buttonColumn.DataPropertyName = dc.ColumnName; 
      dgv.Columns.Add(buttonColumn); 
     } 
     else 
     { // normal columns 
      int c = dgv.Columns.Add(dc.ColumnName, dc.Caption); 
      dgv.Columns[c].ValueType = dc.DataType; 
      dgv.Columns[c].DataPropertyName = dc.ColumnName; 
     } 
    } 
} 

ここでは、私はDataTable DTを使用して、それを呼ばれる方法です:

dataGridView1.AutoGenerateColumns = false; 
CreateSpecialColumns(DT, dataGridView1, " Cook Waiter ", ""); 
dataGridView1.DataSource = DT; 

これは、UseColumnTextForButtonValueプロパティがではなく、がtrueに設定されている場合にのみ有効です。

関連する問題