0

Datatableにバインドされたかなり大きなデータグリッドを使用しています。私の目標は、セル内のデータに基づいてセルのグループに色を付けることです。

データグリッドで値を含むすべてのセルに色を付け、新しい値を検出したときに色を切り替えて、テーブル全体でこれを繰り返します。

これが私がテーブルで扱っているものの例です:

    Contract ID:
    123456 //Top of the contract, color all cells in the contract blue
    123456 //blue
    123456 //blue
    123456 //blue
    456789 //New contract, color all these cells green
    456789 //green 
    456789 //green
    987654 //Another new contract color all these blue (or another color) again
    etc... 

私は以下のようなものを試しましたが、役に立ちませんでした...

for (int i = 0; i < myDataGridView.Rows.Count; i++)
    {
         if (i > 0)
         {
             if (myDataGridView.Rows[i].Cells["contract_id"].Value != myDatagridView.Rows[i-1].Cells["contract_id"].Value)
             {
             myDataGridView.CurrentRow.Cells["contract_id"].BackColor = Color.Blue;
             }
         }
    }

どこから始めればよいかわからないので、行をループして値を確認しようとしましたが、パフォーマンスと速度が低下し、探している結果が得られません。任意の提案をいただければ幸いです。

4

2 に答える 2

1

DataGridView.CellValueChanged私があなたの状況を正しく理解していれば、イベントを処理することであなたが探していることを達成することができます。これにより、すべての行をループする必要がなくなります。理論的には、これはDGVコントロールにデータを入力するときに機能するはずです。

これが私が話していることの非常に大雑把な例です。特定の状況で機能させるには、おそらくそれを試してみる必要があります。Style.Backcolor私の場合、変更された値がコミットされたときにセルのを調整します。データ入力時に1行しかない可能性があるので、この場合も処理する条件を設定しました。

これがWinformsDGVコントロールである場合は、コードでプロパティ(Winforms DGVには存在しない)Cell.Style.BackColorではなく、プロパティを使用する必要があります。Cell.BackColor

状況に合わせてコードを改良する必要があります。。。

    private void Form1_Load(object sender, EventArgs e)
    {
        // Add a handler for the cell value changed event:
        this.myDataGridView.CellValueChanged += new DataGridViewCellEventHandler(myDataGridView_CellValueChanged);
    }

    void myDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
        // grab a reference to the changed cell:
        DataGridViewCell cell = myDataGridView.Rows[e.RowIndex].Cells["contract_id"];

        // Guard against the case where this is the first row in the DGV table:
        if (cell.RowIndex - 1 >= 0)
        {
            if (cell.Value != myDataGridView.Rows[cell.RowIndex - 1].Cells["contract_id"].Value)
            {
                // CHange the Style.BackColor property for the cell:
                myDataGridView.CurrentRow.Cells["contract_id"].Style.BackColor = Color.Blue;
            }
        }
于 2012-12-31T17:31:19.583 に答える
0

データベースにこのカラーフラグがないため、間違いなく唯一のオプションはデータテーブルの行をループすることです。

既存のデータテーブルに新しいデータ列を追加し、ループして色を設定することをお勧めします。

次に、「CellFormating」イベントでセルに色を付けることができます。その場合は、カラー列の値を読み取って使用できます。

セルフォーマットイベントの完全で単純な例がここにあります:http: //msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellformatting.aspx

よろしく

于 2012-12-31T16:08:44.923 に答える