DatagridViewのドロップダウンリスト幅ComboBoxColumn -winformsの設定
-
29-09-2019 - |
質問
コンボボックス列が入っているDatagridViewがあります。この列はDataBoundです。リストの最大のアイテム幅に従って、ドロップダウンリストの幅を設定したいと思います。通常のコンボボックスが同じことを達成するために、リスト内の最大の幅アイテムを見つけることでコンボボックスの幅を設定する拡張法を使用しました。これは、コンボボックスのドロップダウンイベントで行われます。
DatagridView ComboBox Colummenでは、同じことを達成したいと思います。この場合、ドロップダウンイベントを取得するにはどうすればよいですか?同じことを達成する他の方法がある場合は、私にさせてください。
解決
少しの調査の後、私はこれに対する答えを見つけました。
DatagridViewのコンボボックス列にデータソースを設定しています。したがって、DataSourceを設定した後、列の表示メンバーとして設定されている値に対して、データテーブル内の最大のアイテムの幅を見つけています。私の質問で上記のリンクに記載されているのと同じロジックを使用しています。ドロップダウンイベントで行うのではなく、DataSourceを設定しながらそれをやっています。私の質問の上記のリンクでは、ドロップダウンリストが表示されるたびにドロップダウンリストの幅を設定することでした。だから、ある意味で私のアプローチは良さそうです。
ここで、私がこれをどのようにしたか:
// 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
列の自動サイジングでは、狭くなりすぎるようになります。