سؤال

أود أن أضيف backcolor محددة خط اعتمادا على خاصية الكائن binded.

الحل عندي (ويعمل) هو استخدام الحدث DataBindingComplete ولكن أنا لا أعتقد أنه هو أفضل حل.

هنا هو الحدث:

    private void myGrid_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
    {

        for (int i = 0; i < this.myGrid.Rows.Count; i++)
        {
            if((this.myGrid.Rows[i].DataBoundItem as MyObject).Special)
            {
                this.myGrid.Rows[i].DefaultCellStyle.BackColor = Color.FromArgb(240, 128, 128);
            }
        }
    }

أي خيار آخر من شأنه أن يكون أفضل ؟

هل كانت مفيدة؟

المحلول

ويمكنك أيضا إرفاق معالج أحداث إلى RowPostPaint:

dataGridView1.RowPostPaint += OnRowPostPaint;

void OnRowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
    MyObject value = (MyObject) dataGridView1.Rows[e.RowIndex].DataBoundItem;
    DataGridViewCellStyle style = dataGridView1.Rows[e.RowIndex].DefaultCellStyle;

    // Do whatever you want with style and value
    ....
}

نصائح أخرى

وأنا لا أعمل حقا مع WinForms عناصر ذلك بكثير، ولكن في ASP يمكنك استخدام طريقة "ItemDataBound. هل هناك شيء مماثل في أشكال النوافذ لDataGrid قابلة لل؟

وإذا كان الأمر كذلك، في هذا الأسلوب، والحجج الحدث سيتضمن العنصر الذي كان ربط بيانات، جنبا إلى جنب مع الصف DataGrid. ذلك الرمز العام أن ننظر بشيء من هذا القبيل (بناء الجملة ربما إيقاف):

if(((MyObject)e.Item.DataItem).Special)
   e.Item.DefaultCellStyle.BackColor = Color.FromArgb(240, 128, 128);

أود أن أقترح عدد قليل من الأشياء:

  • ننظر في تعديل الصفوف في _OnRowDatabound
  • لا يقع لون في التعليمات البرمجية الخاصة بك!!!هذا سيكون خطأ كبيرا.استخدام سمات الملكية وتعيين cssclass.هز الأصابع إلى الناس لا تزال تفعل ذلك.

اسمحوا لي أن أعرف إذا كنت الصراع مع تنفيذ وأنا ما بعد مقتطف.

private void myGrid_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{

    foreach (DataGridViewRow row in myGrid.Rows)
    {
        if((row.DataBoundItem as MyObject).Special)
        {
            row.DefaultCellStyle.BackColor = Color.FromArgb(240, 128, 128);
        }
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top