2009-06-23 12 views
1

私はオブジェクトのリストにバインドされたDGVを持っています。これは、オブジェクトのプロパティの1つがブール値であるため、チェックボックスとして表示されますが、代わりに単純なyes/noのテキストフィールドを使用することを除いて、正常に動作します。私は追加の列を追加し、ブール値に基づいて適切な文字列を入力することを考えましたが、これは少し上にあるようです。簡単な方法がありますか?バインドされたDataGridViewはブール値にテキストセルを使用できますか?

DGVは読み取り専用です。

答えて

0

ColumnTypeプロパティ= DataGridViewTextBoxColumnのようにブール値を表示する列を編集します。

列にTrue/Falseの文字列が表示されるようになりました。

デザイナでこの変更を行いますデザイナで

  1. を、右DGVをクリックします。

  2. ポップアップメニューで、[Edit Columns ...]を選択します。[Edit Columns]ダイアログが表示されます。

  3. 「列の編集」ダイアログで、左側の列を選択し、右側の列の種類を含むプロパティを探します。

列があなたのDGVに追加されているときは、プログラムColumnTypeを設定することができます。MSDNから

DataGridViewColumn column = new DataGridViewColumn(); 
DataGridViewCell cell = new DataGridViewTextBoxCell(); 
column.CellTemplate = cell; 
dgv.Columns.Add(column); 

コード。

+0

「ColumnType」プロパティが表示されません。Me.DGV.Columns( "ColName")。? – Simon

+0

私はこれを行う方法について少し明確にしました! –

+0

良いアイデアだが、私はDGVが実行時に動的に構築されるので、これをプログラム的に行う必要がある。 – Simon

3

これは不可能なようですので、私はだまされました。私はブール値のプロパティに基づいて文字列を返す読み取り専用プロパティをビジネスオブジェクトに追加しました。私はDGVのブール値の列を隠し、文字列プロパティを表示しました。

+0

Trueですが、DataGridViewを追加する前に列を作成するときにColumnTypeを設定できます。 –

5

データバインドのシナリオでブール値の視覚的外観を変更することは不可能であるようです。 でもDataGridViewCellStyle.FormatProvider等可能System.Int32、System.Int64、System.Decima、

したがって、私にはうまくいく回避策が見つかりました。おそらくそれは最善の解決策ではありませんが、現在私のニーズに合っています。 は私がDataGridView.ColumnAddedイベントを処理し、DataGridViewTextBoxColumnDataGridViewCheckBoxColumnを交換してください。その後、CellFormatingイベント(Microsoftが推奨、上記のリンクを参照)を使用してソースデータをフォーマットします。

private DataGridViewTextBoxColumn textBoxColumn = null; 
void _dataGrid_ColumnAdded(object sender, DataGridViewColumnEventArgs e) 
{ 
    // Avoid recursion 
    if (e.Column == textBoxColumn) return; 

    DataGridView gridView = sender as DataGridView; 
    if (gridView == null) return; 

    if(e.Column is DataGridViewCheckBoxColumn) 
    { 
     textBoxColumn = new DataGridViewTextBoxColumn(); 
     textBoxColumn.Name = e.Column.Name; 
     textBoxColumn.HeaderText = e.Column.HeaderText; 
     textBoxColumn.DataPropertyName = e.Column.DataPropertyName; 

     gridView.Columns.Insert(e.Column.Index, textBoxColumn); 
     gridView.Columns.Remove(e.Column); 
    } 
} 

void _dataGrid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
{ 
    DataGridViewColumn col = _dataGrid.Columns[e.ColumnIndex]; 

    try 
    { 
     if (col.Name == "IsMale") 
     { 
      bool isMale = Convert.ToBoolean(e.Value); 
      e.Value = isMale ? "male" : "female"; 
     } 
    } 
    catch (Exception ex) 
    { 
     e.Value = "Unknown"; 
    } 
}