How to control the number of visible items in a combo box cell
11 Jun 20214 minutes to read
There is a GridComboBoxListBoxPart.DropDownRows property that you can set to control this. The GridComboBoxListBoxPart is the actual control type of the list that is dropped to display the items. But, it is buried a little deep and generally needs an event handler to set it. The reason for using an event handler is that normally a single combobox control is shared among all combobox cells. Each cell can potentially have a different list and may need different numbers of visible rows. So to handle this, you must catch Grid.CurrentCellShowingDropDown event and set the property there depending upon the exact row and column.
private void grid_CurrentCellShowingDropDown(object sender, GridCurrentCellShowingDropDownEventArgs e)
{
GridControlBase grid = sender as GridControlBase;
if(grid != null)
{
GridCurrentCell cc = grid.CurrentCell;
GridComboBoxCellRenderer cellRenderer = cc.Renderer as GridComboBoxCellRenderer;
//Sets number of visible items for combobox in Row 6 as 4, Row 4 as 7, Row 2 as 10 , and so on.
if(cc != null)
{
if(cc.RowIndex == 6)
((GridComboBoxListBoxPart)cellRenderer.ListBoxPart).DropDownRows = 4;
else if(cc.RowIndex == 4)
((GridComboBoxListBoxPart)cellRenderer.ListBoxPart).DropDownRows = 7;
else if(cc.RowIndex == 2)
((GridComboBoxListBoxPart)cellRenderer.ListBoxPart).DropDownRows = 10;
else ((GridComboBoxListBoxPart)cellRenderer.ListBoxPart).DropDownRows = 6;
}
}
}
Private Sub Grid_CurrentCellShowingDropDown(sender As Object, e As GridCurrentCellShowingDropDownEventArgs)
Try
Dim grid As GridControlBase = sender
Dim cc As GridCurrentCell = grid.CurrentCell
If cc.Renderer Is GetType(GridComboBoxCellRenderer) Then
Dim cellRenderer As GridComboBoxCellRenderer = cc.Renderer
'Sets number of visible items for combobox in Row 6 as 4, Row 4 as 7, Row 2 as 10 , and so on.
If cc.RowIndex = 6 Then
CType(cellRenderer.ListBoxPart, GridComboBoxListBoxPart).DropDownRows = 4
ElseIf cc.RowIndex = 4 Then
CType(cellRenderer.ListBoxPart, GridComboBoxListBoxPart).DropDownRows = 7
ElseIf cc.RowIndex = 2 Then
CType(cellRenderer.ListBoxPart, GridComboBoxListBoxPart).DropDownRows = 10
Else
CType(cellRenderer.ListBoxPart, GridComboBoxListBoxPart).DropDownRows = 6
End If
End If
Catch
End Try
End Sub