إعداد قائمة المنسدلة عرض DataGridView ComboBoxColumn - WinForms
-
29-09-2019 - |
سؤال
لدي 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
من العمود إذا كان حجمه تلقائيًا يؤدي إلى أن يصبح ضيقًا جدًا.