سؤال

أنا أستخدم C #، WinForms، و. 35

النموذج الخاص بي لديه مخصص DataGridView (مؤقتا مؤقتا لمنع الخفقان أثناء أحداث التشيللي الخاصة بي، كما رأينا هنا). عندما أقوم بإجراء بحث قاعدة بيانات، أرتدي مجموعة البيانات الناتجة إلى datagridview.

أنا التعامل مع CellFormatting الحدث لرسم الصفوف لون معين، وهذا يتوقف على بياناتهم.

رمز DataGridView الخاص بي:

resultsGridView.DataSource = results.DefaultViewManager.DataSet.Tables[0];
resultsGridView.AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue;
resultsGridView.BorderStyle = BorderStyle.Fixed3D;
resultsGridView.CellFormatting += new DataGridViewCellFormattingEventHandler(resultsGridView_CellFormatting);

رمز إلغاء التشغيل الخاص بي:

void resultsGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    int rowIndex = e.RowIndex;
    DataGridViewRow therow = resultsGridView.Rows[rowIndex];
    if ((bool)therow.Cells["Sealed"].Value == true)
    {
        therow.DefaultCellStyle.BackColor = Color.Pink;
    }
    if (therow.Cells["Database"].Value as string == "PNG")
    {
        therow.DefaultCellStyle.BackColor = Color.LightGreen;
    }
}

كل شيء يعمل بشكل رائع باستثناء ذلك، عندما أتعامل مع الرجيلي، يبدو أن حدث الطلاء في النموذج بأكمله يبدو إيقاف تشغيله. يتوقف المؤشر وامض في مربع النص، ويبدو أن توضيح النموذج مثل هذا:

Menu bar picture

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

تعلق خارج resultsGridView.CellFormatting خط في رمز DataGridView يحدد تماما المشكلة.

هل أرسم الخلايا الخطأ، أم هل هناك شيء آخر أحتاج إلى التعامل معه؟

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

المحلول

ربما تسبب استثناء داخل هذا الحدث. لست متأكدا من كيفية تعريف المناولة، لكن المحيط بالمثل بمحاولة التقاط سيكون خطوة أولى.

try 
{
   int rowIndex = e.RowIndex;
   ....   
}
catch(Exception ex)
{
    System.Diagnostics.Trace.Error(ex.message);
}

في الشكل الثاني، لا أعتقد therow.Cells["Sealed"] سيعمل. جرب شيئا مثل therow.Cells["dataGridViewTextBoxColumn2"]. وبعد يتم فهرسة الخلايا بواسطة اسم العمود, ، ليس DataPropertyName..

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top