0

少し前にこの質問をしました。datagridviewチェックボックスセルを非表示にします。良い答えが得られなかったので、別のことを試してみることにしました。

私はローンのすべての分割払いのグリッドを持っています。すべての分割払いにはチェックボックスがあります。そのチェックボックスがチェックされているとき、私はクライアントがそのチェックボックスの代金を払っていることを示しています。

これで、分割払いがすでに支払われている場合、チェックボックスは必要ありません。今、私は有料の分割払いのチェックボックスを無効にしました。表示されますが、クリックしても何も起こりません。しかし、私がやりたかったのは、チェックボックスを緑色でペイントすることです。この画像のように(色はペイントで描かれていますが、実際の画像ではありません)

ここに画像の説明を入力してください

わかりました。このコードを使用する前に、チェックボックスを非表示にしようとしました。

private void dgv_Cuotas_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
    {           
        if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
        {
            if (dgv_Cuotas.Columns[e.ColumnIndex].Name == "Seleccionar" && Convert.ToBoolean(dgv_Cuotas.Rows[e.RowIndex].Cells["pagada"].Value) == true)
            {
                e.CellStyle.BackColor = Color.Green;
                e.PaintBackground(e.ClipBounds, true);
                e.Handled = true;
            }
        }
    }

ここに画像の説明を入力してください

これでセル全体をペイントしますが、チェックボックスをペイントしたいだけです。また、この実装では、そのセルをクリックすると、チェックボックスをクリックしていることに気付くことができ、次のように背景色が白に変わります。

ここに画像の説明を入力してください

実行時にDatasource=lista_cuota(分割払いのリスト)を割り当てて、DataGridView(dgv_Cuotas)の行と列を作成しています。そのため、コードによってチェックボックス列が後に追加されます。

DataGridViewCheckBoxColumn chbox = new DataGridViewCheckBoxColumn();
        {
            chbox.CellTemplate = new DataGridViewCheckBoxCell();
            chbox.HeaderText = "";
            chbox.Name = "Seleccionar";
            chbox.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            chbox.FlatStyle = FlatStyle.Standard;
        }
        dgv_Cuotas.Columns.Insert(16, chbox);
        dgv_Cuotas.Columns[16].DisplayIndex = 0;

このようにすると、DataGridViewTextBoxCellを特定のセルに割り当てるチェックボックスセルを「非表示」にすることができないため、代わりにチェックボックスだけをペイントしてみたかったのです。

Entity Frameworkを使用しているので、クラスに新しいフィールドを追加したくありません。

4

1 に答える 1

0

私のすべての調査で、CheckBoxCellの色を変更することは不可能であるという結論に達しました。同じサイズの長方形を描くことでシミュレートできます。別の質問でそのソリューションを作成しました。C#WinformsでDataGridViewCell内に塗りつぶされた円または長方形を描画します

于 2013-01-16T16:41:10.007 に答える