it-swarm.dev

تغيير لون خلية datagridview بشكل حيوي

لدي كائن dataGridView يتم ملؤها مع البيانات. أريد النقر فوق زر وجعله يغير لون خلفية الخلية. هذا ما لدي حاليا

foreach(DataGridViewRow row in dataGridView1.Rows)
{
    foreach(DataGridViewColumn col in dataGridView1.Columns)
    {
            //row.Cells[col.Index].Style.BackColor = Color.Green; //doesn't work
            //col.Cells[row.Index].Style.BackColor = Color.Green; //doesn't work
        dataGridView1[col.Index, row.Index].Style.BackColor = Color.Green; //doesn't work
    }
} 

كل هؤلاء الثلاثة يتسببون في إعادة رسم الجدول فوق نفسه بطريقة متداخلة ومحاولة تغيير حجم الجداول تصبح فوضى. عند النقر فوق خلية ، تظل القيمة مميزة ولا يتغير لون الخلفية.

س: كيف يمكنني تغيير اللون الخلفي لخلية فردية بعد وجود الجدول؟

20
fifamaniac04

هذا يعمل لي

dataGridView1.Rows[rowIndex].Cells[columnIndex].Style.BackColor = Color.Red;
56
Ehsan

تطبيق الملحق الخاص بك من DataGridViewTextBoxCell وتجاوز طريقة الرسام مثل هذا:

class MyDataGridViewTextBoxCell : DataGridViewTextBoxCell
{
    protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex,
        DataGridViewElementStates cellState, object value, object formattedValue, string errorText,
        DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
    {
        if (value != null)
        {
            if ((bool) value)
            {
                cellStyle.BackColor = Color.LightGreen;
            }
            else
            {
                cellStyle.BackColor = Color.OrangeRed;
            }
        }
        base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value,
            formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts);
}

}

ثم في التعليمات البرمجية قم بتعيين خاصية CellTemplate الخاصة بعمودك إلى مثيل لفصلك الدراسي

columns.Add(new DataGridViewTextBoxColumn() {CellTemplate = new MyDataGridViewTextBoxCell()});
3
Pavel

شكرا انها تعمل

أنا هنا فعلت هذا مع حقل الكمية هو صفر يعني أنه يظهر أن الخلايا باللون الأحمر

        int count = 0;

        foreach (DataGridViewRow row in ItemDg.Rows)
        {
            int qtyEntered = Convert.ToInt16(row.Cells[1].Value);
            if (qtyEntered <= 0)
            {
                ItemDg[0, count].Style.BackColor = Color.Red;//to color the row
                ItemDg[1, count].Style.BackColor = Color.Red;

                ItemDg[0, count].ReadOnly = true;//qty should not be enter for 0 inventory                       
            }
            ItemDg[0, count].Value = "0";//assign a default value to quantity enter
            count++;
        }

    }
1
Rakesh

ضع في الاعتبار استخدام حدث DataBindingComplete لتحديث النمط. يغير الرمز التالي نمط الخلية:

    private void Grid_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
    {
        this.Grid.Rows[2].Cells[1].Style.BackColor = Color.Green;
    }
0
Ángel Ibáñez