سؤال

لدي DataGridView مع عمود Combobox فيه. هذا العمود هو قاعدة البيانات. أريد تعيين عرض قائمة القائمة المنسدلة وفقًا لأكبر عرض عنصر في القائمة. بالنسبة إلى ComboBox العادي لتحقيق نفس طريقة التمديد التي ستضع عرض مربع التحرير والسرد من خلال العثور على أكبر عنصر عرض في القائمة. يتم ذلك في حدث القائمة المنسدلة من combobox.

الآن في عمود DataGridView Combobox أريد تحقيقه. كيف يمكنني الحصول على الحدث المنسدلة في هذه الحالة؟ واسمحوا لي إذا كان هناك أي طريقة أخرى لتحقيق ذلك؟

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

المحلول

بعد القليل من التحقيق ، وجدت الإجابة على هذا.

أقوم بتعيين مصدر البيانات على عمود Combobox من DataGridView. لذلك ، بعد تعيين مصدر البيانات ، أجد عرض أكبر عنصر في البيانات القابلة للقيمة التي يتم تعيينها كعضو عرض للعمود. أنا أستخدم نفس المنطق المذكور في الرابط الوارد أعلاه في سؤالي ، بدلاً من القيام به في الحدث المنسدلة ، أقوم بذلك أثناء إعداد مصدر البيانات ، وهو وقت واحد. في الرابط الوارد أعلاه في سؤالي ، كان عرض عرض القائمة المنسدلة في كل مرة يتم عرض قائمة المنسدلة. لذلك ، بطريقة ما يبدو مقاربي جيدة.

هنا ، كيف فعلت هذا:

// This line is picked up from designer file for reference
  DataGridViewComboBoxColumn CustomerColumn; 

  DataTable _customersDataTable = GetCustomers();

  CustomerColumn.DataSource = _customersDataTable;
  CustomerColumn.DisplayMember = Customer_Name;
  CustomerColumn.ValueMember = ID;

  var graphics = CreateGraphics();

  // Set width of the drop down list based on the largest item in the list
  CustomerColumn.DropDownWidth = (from width in
                         (from DataRow item in _customersDataTable.Rows
                          select Convert.ToInt32(graphics.MeasureString(item[Customer_Name].ToString(), Font).Width))
                       select width).Max();

نصائح أخرى

يمكنك محاولة ضبط AutoSizeMode من العمود إلى AllCellsExceptHeader, ، أو AllCells. يمكنك أيضًا تعيين ملف MinimumWidth من العمود إذا كان حجمه تلقائيًا يؤدي إلى أن يصبح ضيقًا جدًا.

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