5

の列の値に基づいて、行がフォントの色ベースを自動更新する方法を尋ねたいと思いますdataGridView

たとえば、テーブルには次の 4 つの列がありますid, name, rentPayMent and check

各行をチェックして、次の値のいずれかがあるかどうかを確認します。Yes のcheck == 0 場合、この行のフォントcolor = red Elsedo nothing

移動時に、次のようにコードを使用しますが、エラーが発生します

オブジェクト参照がオブジェクトのインスタンスに設定されていません。System.NullReferenceException が処理されませんでした

private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        if (row.Cells[3].Value.ToString() == "0") //**Object reference not set to an instance of an object**
        {
            row.DefaultCellStyle.BackColor = Color.Red;  //then change row color to red
        }
    }
}

すべてのおかげで、私はすでに解決策を得ました。

    private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
    {
        if (dataGridView1.Rows[e.RowIndex].Cells[3].Value != null && !string.IsNullOrWhiteSpace(dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString()))
        {
            if (dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString().Trim() == "0")
                dataGridView1.Rows[e.RowIndex].DefaultCellStyle = new DataGridViewCellStyle { ForeColor = Color.Red };
        }
        else
        {
            dataGridView1.Rows[e.RowIndex].Cells[3].Style = dataGridView1.DefaultCellStyle;
        }

    }
4

5 に答える 5

1
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    if (dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value != null && !string.IsNullOrWhiteSpace(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString()))
    {
        dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Style = new DataGridViewCellStyle { ForeColor = Color.Orange, BackColor = Color.Blue };
    }
    else
    {
        dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Style = dataGridView1.DefaultCellStyle;
    }
}
于 2013-01-03T04:21:49.980 に答える
0

私はwinformでそれをしました。

以下の私のコードを試してください:

private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {

            foreach (DataGridViewRow row in dataGridView1.Rows)
            {

                if (row.Cells["YourDatagridColumnName"].Value.ToString() == "0") //if check ==0
                {
                    row.DefaultCellStyle.BackColor = Color.Red;  //then change row color to red
                } 

            }

        }

よろしくお願いします

于 2013-01-03T04:30:55.897 に答える
0

私はこれに似たものを使用します:

private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        if(!string.IsNullOrEmpty(row.Cells[3].Value.ToString()))  // make sure the value is present
        (
          if (row.Cells[3].Value.ToString() == "0") 
          {
              row.DefaultCellStyle.BackColor = Color.Red;  //then change row color to red
          }
        )
    }
}
于 2013-01-03T23:05:25.527 に答える
0

dataGridView で列に名前を付けることが推奨されます。たとえば、列チェックに colCheck という名前を付けます。次のように、CellFormatting メソッドを使用して、行のフォントの色を変更します。

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{

    if (e.RowIndex > -1 && e.ColumnIndex == dataGridView1.Columns["colCheck"].Index)
        {
            if (e.Value != null)
            {

                if (dataGridView1.Rows[e.RowIndex].Cells["colCheck"].Value.ToString() == "1")
                {
                    for (int i = 0; i < this.dataGridView1.Columns.Count; i++ )
                    {
                        this.dataGridView1.Rows[e.RowIndex].Cells[i].Style.ForeColor = Color.Red;
                    }

                }
                else
                {
                    for (int i = 0; i < this.dataGridView1.Columns.Count; i++ )
                    {
                        this.dataGridView1.Rows[e.RowIndex].Cells[i].Style.ForeColor = Color.Black;
                    }
                }
            }
        }


}
于 2015-06-20T15:16:33.380 に答える
-1

個人的には、JavaScript を使用してこのロジックを処理します。しかし、CodeBehind に含めることが絶対に必要な場合は、セルの値が "0" であるかどうかを確認します。その場合は、「赤」(または任意の名前) の CssClass を追加し、色の値を持つように CSS を記述します。これにより、色をサーバー側で処理する代わりに、少なくとも保守が容易になります。

于 2013-01-03T04:43:08.250 に答える