4

コンボボックス列を含むデータグリッドビューがあります。この列はデータバインドされています。リスト内の最大の項目幅に従って、ドロップダウン リストの幅を設定したいと考えています。通常のコンボボックスで同じことを達成するために、リスト内の最大幅の項目を見つけてコンボボックスの幅を設定する拡張メソッドを使用しました。これは、コンボボックスの DropDown イベントで行われます。

今、DataGridView コンボボックスの列で、同じことを達成したいと考えています。この場合、DropDown イベントを取得するにはどうすればよいですか? 同じことを達成する他の方法があれば教えてください。

4

2 に答える 2

6

少し調査した後、私はこれに対する答えを見つけました。

データグリッドビューのコンボボックス列にデータソースを設定しています。したがって、データソースを設定した後、列の DisplayMember として設定されている値のデータテーブルで最大の項目の幅を見つけています。上記の質問のリンクに記載されているのと同じロジックを使用していますが、DropDown イベントで行うのではなく、データソースを設定しながら行っています。これは 1 回限りです。上記の私の質問のリンクでは、ドロップダウンリストが表示されるたびにドロップダウンリストの幅を設定していました。ある意味、私のアプローチは良さそうです。

ここで、私がこれをどのように行ったか:

// 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();
于 2010-10-11T13:30:24.923 に答える
1

AutoSizeMode列の をAllCellsExceptHeader、 またはに設定してみてくださいAllCellsMinimumWidth列の自動サイズ変更によって列が狭くなりすぎる場合は、列の を設定することもできます。

于 2010-10-11T13:10:56.280 に答える