1

DataGridView(「支払い」オブジェクトのリスト) コレクションにバインドしますRowsAdded。イベントを使用して、支払いのステータスに応じて行の背景色を変更します。( row.DefaultCellStyle.BackColor) を使用して背面の色を変更していますが、最初の行の色を変更すると、背面の色を変更していなくても、2 行目の色も変更されます。独自の色を持つ列がいくつかあるため、背面の色を(白)に変更したくありません。

private void dgvPayment_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
        {

            DataGridViewRow row = dgvPayment.Rows[e.RowIndex];
            Payment  lPayment = row.DataBoundItem as Payment;
            if (lPayment != null)
                if (lPayment.IsLocked)
                {
                    row.DefaultCellStyle.BackColor = Color.LightPink;
                    row.ReadOnly = true;
                }
        }

これを解決するには?

ここからソースコードをダウンロードできます。

4

2 に答える 2

1

問題は、backColor を白にすると、行全体が白くなることです。独自の backColor を持つ列があるため、これは必要ありません。

ここで述べたように(datagridview-defaultcellstyle-rows-and-columns-priority):

行スタイルが列スタイルを明示的にオーバーライドするか、行スタイルが列スタイルの上に適用されるため、おそらく DataGridViews の内部的なものです。

最初の行と最初の列にデフォルトのスタイルを設定することに加えて、最初のセルのスタイルを直接設定してみてください。これは、行または列のデフォルトを上書きします。

だから私はこのように解決しました。

private void dgvPayment_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
        {
            for (int index = e.RowIndex; index <= e.RowIndex + e.RowCount - 1; index++)
            {
                DataGridViewRow row = dgvPayment.Rows[index];
                Payment lPayment = row.DataBoundItem as Payment;
                if (lPayment != null && lPayment.IsLocked)
                {
                    row.DefaultCellStyle.BackColor = Color.Pink;
                    row.ReadOnly = true;
                }
                else
                {
                    row.DefaultCellStyle = null;
                    row.ReadOnly = false;
                }


            }
        }
于 2012-11-23T15:50:09.483 に答える
1

行追加イベントは、いくぶん予測できない動作をします。この種のグリッド操作には、通常、他のイベントを使用する方が適切です。

この場合、次のCellFormattingイベントを使用します。

void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    DataGridViewRow row = dgvPayment.Rows[e.RowIndex];
    Payment  lPayment = row.DataBoundItem as Payment;
    if (lPayment != null && lPayment.IsLocked)
    {                
        row.DefaultCellStyle.BackColor = Color.LightPink;
    }
    else
    {
        row.DefaultCellStyle.BackColor = Color.White;
    }
}
于 2012-11-23T14:57:39.873 に答える