2009-04-23 7 views
1

私は手動で作成された列でデータバインディングを使用するDataGridViewを持っていますが、これはうまくいきます。DataBinding DataGridview行BackColor

しかし、私は行のBackColorも同様にデータバインドしたいと思っています。

これは私の最新の試みです:ArguementExceptionを生成している

dataGridFileTransfer.RowHeadersVisible = false; 
dataGridFileTransfer.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; 
dataGridFileTransfer.SelectionMode = DataGridViewSelectionMode.FullRowSelect; 
dataGridFileTransfer.MultiSelect = false; 
dataGridFileTransfer.ReadOnly = true; 
var files = GetReceivedFiles(false).Union(FileDetails.Select(FileStatus.FailedVerification)).ToList(); 
dataGridFileTransfer.AutoGenerateColumns = false; 

string[] displayHeaders = new string[] { COL_NAME, COL_TYPE, COL_CREATED, COL_SIZE, COL_STATUS }; 
string[] displayProps = new string[] { "Filename", "FileTypeDisplayName", "Created", "Size", "FileStatus" }; 

for (int i = 0; i < displayHeaders.Length; i++) 
{ 
    DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn(); 
    col.HeaderText = displayHeaders[i]; 
    col.DataPropertyName = displayProps[i]; 

    if (displayHeaders[i] == COL_CREATED) 
    col.DefaultCellStyle.Format = Constants.DDMMYYYHHMMSS; 

    dataGridFileTransfer.Columns.Add(col); 
} 

Binding bi = new Binding("DefaultCellStyle.BackColor", files, "DisplayColor"); 
dataGridFileTransfer.DataBindings.Add(bi); 

dataGridFileTransfer.DataSource = files; 

DefaultCellStyle.BackColor」 ターゲットコントロールの "プロパティ にバインドすることはできません"。パラメータ名: PropertyName意味」

は間違っているのPropertyNameの値はありますか、私はDataGridViewの以外のオブジェクトに結合する必要があります(つまり、列?) それともPropertyNameはにすることはできません問題があります?フォームXYは?私は前にこの構文を使用/見ていたと思ったが、多分それは唯一のデータメンバーのために働く?

すべてのヘルプは非常に

答えて

1

を高く評価され、私は問題がfiles.DisplayColorだと思います。filesコレクションANは何を持っていませんプロパティDisplayColorしかし、同僚の各項目条件があります。既存のプロパティをバインドしようとしています。さらにバインドコレクションDataGridView.DataBindingsを使用すると、行ではなくコントロールのデータバインドプロパティを使用できます。すべての行に対して1つだけDataGridView.DefaultCellStyle.BackColorが存在します。だから私はfilesから対応する項目に各行のDefaultCellStyleをバインドする必要があり、これが可能かどうかはわかりません。 DataGridViewは、必要に応じて行を作成して削除することがあります。たとえば、フィルタリングを実行すると、データバインディングも破棄されます。

私は行の色付けをデータバインディングで行うことはできませんが、私は個人的にそれを疑っています。これは、この行にバインドされたオブジェクトデータのプロパティDisplayColorをこの行のプロパティDefaultCellStyle.BackColorにバインドする、本当にスマートなロジック認識を必要とします。

このようなスマートデータバインディングを実装することはできません。それは素晴らしいことですが、それもかなり複雑になります。単純な解決策として、RowPrepaintイベントを使用して、行の正しい色を設定できます。

+0

こんにちは、私はちょうど最初の2つの文が間違っていることを指摘したかったが、他のすべて私は同意した。私は最後にRowPrepaintに行った。ご協力いただきありがとうございます。 データソース(ファイル)をバインドすると、コレクションになり、databindingプロパティはそのコレクション内のアクティブなオブジェクトになります(files [0] .DisplayColorは自分のオブジェクトに基づいて有効です)。私は既にこのアプローチを別の形式で使用しています。 txtServerAddress.DataBindings.Add( "Text"、m_Profiles、 "ServerAddress"); txtServerAddress.TextをアクティブなProfile.ServerAddress値にバインドします。 – MattH

関連する問題