9

の中央に小さな塗りつぶされた円を描きたいですDataGridViewCell。長方形もそのトリックを行うことができます。CellPaintingイベントでそれをしなければならないと思います。

私はこれを試しました:

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.LightGray; ;
                e.PaintBackground(e.ClipBounds, true);
                e.Handled = true;
            }
        }

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

セル全体をペイントしているので、次の図に示すように、小さな円または長方形が必要です。

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

どうすればこれを達成できますか?フォーマットエラーが発生しているため、DataGridViewImageCellを使用することはできません。そのDataGridViewCheckBoxCellをDataGridViewTextboxCellに変更できます。

編集: DataGridViewImageCellに変更できます!! 以前に何が起こったのかわかりませんが、それでも画像を読み込むことができません。赤い十字が付いた白い正方形が表示されます(画像アイコンなし)。これが私のコードです:

dgv_Cuotas.Rows[row.Index].Cells["Seleccionar"] = new DataGridViewImageCell();
dgv_Cuotas.Rows[row.Index].Cells["Seleccionar"].Value = Properties.Resources.punto_verde;
dgv_Cuotas.Rows[row.Index].Cells["Seleccionar"].Style.ForeColor = Color.White;
dgv_Cuotas.Rows[row.Index].Cells["Seleccionar"].Style.SelectionForeColor = Color.White;
4

3 に答える 3

7

質問と回答をありがとう@Andres。

私の回答をご覧ください:(たとえば)2列のdatagridviewがあります。最初の列で、2列目にその色がwrite(color name)であるカラーサークルを表示したいと思います。このための私のコードは次のとおりです。

for (int i = 1; i <= 5; i++)
    Dgv.Rows.Add();
Dgv[1, 0].Value = "Red";
Dgv[1, 1].Value = "Blue";
Dgv[1, 2].Value = "Yellow";
Dgv[1, 3].Value = "Green";
Dgv[1, 4].Value = "Black";

サークルを作成するために、次のクラスコードを記述します。

public static class GraphicsExtensions
{
    public static void FillCircle(this Graphics g, Brush brush, float centerX, float centerY, float radius)
    {
        g.FillEllipse(brush, centerX - radius, centerY - radius, radius + radius, radius + radius);
    }
}

datagridviewのCellPaintingイベントで、次のコードを記述します。

private void Dgv_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
    if (e.ColumnIndex == 0 && e.RowIndex > -1)
    {
        Brush Brs= new SolidBrush(Color.FromName(Dgv[1, e.RowIndex].Value.ToString()));
        GraphicsExtensions.FillCircle(e.Graphics, Brs, e.CellBounds.Location.X + 5, e.CellBounds.Location.Y + 10, 5);
        e.Handled = true;                
    }
}

結果は2列のdatagridviewです:

列1:6つの特定の色の6つの円

2列目:6色の名前

ありがとう。

于 2013-05-30T06:42:27.520 に答える
5

やっと解決しました。チェックボックスと同じサイズで同じ場所に塗りつぶされた長方形を描画しました。

私は次のことをしました:

まず、DataGridViewCheckBoxCellをDataGridViewTextBoxCellに変更して、チェックボックスを非表示にします。

DataGridViewTextBoxCell blank_cell = new DataGridViewTextBoxCell();
dgv_Cuotas.Rows[row.Index].Cells["Seleccionar"] = blank_cell;
dgv_Cuotas.Rows[row.Index].Cells["Seleccionar"].Style.ForeColor = Color.Transparent;
dgv_Cuotas.Rows[row.Index].Cells["Seleccionar"].Style.SelectionForeColor = Color.Transparent;

セルに「False」が表示されないように、必ず透明な前色を選択してください。

その後、cellpaintingイベントを使用してセル内の長方形をペイントしました。

if (dgv_Cuotas.Columns[e.ColumnIndex].Name == "Seleccionar" && Convert.ToDecimal(dgv_Cuotas.Rows[e.RowIndex].Cells["Restante"].Value) == 0)
            {
                Color c1 = Color.FromArgb(255, 113, 255, 0);
                Color c2 = Color.FromArgb(255, 2, 143, 17);

                LinearGradientBrush br = new LinearGradientBrush(e.CellBounds, c1, c2, 90, true);
                ColorBlend cb = new ColorBlend();
                cb.Positions = new[] { 0, (float)1 };
                cb.Colors = new[] { c1, c2 };
                br.InterpolationColors = cb;

                Rectangle rect = new Rectangle(e.CellBounds.Location.X + 4, e.CellBounds.Location.Y + 4, 13, 13);

                e.Graphics.FillRectangle(br, rect);
                e.PaintContent(rect);
                e.Handled = true;
            }

私が行ったように、Location.XとLocation.Yの値を変更することで、目的の場所を取得できます。

ここに画像の説明を入力してください それが誰かを助けることを願っています!

于 2013-01-16T15:51:02.830 に答える
1

この方法で列をカスタマイズするには、DataGridViewテンプレートを確認してください。これにより、より詳細な制御が可能になります。

これは役立つ場合があります:http: //csharp.net-informations.com/datagridview/csharp-datagridview-template.htm

于 2013-01-16T01:26:06.990 に答える