How to set the scrollbar in WinForms GridGroupingControl?
Freeze column
By
default, WinForms
GridGroupingControl is having support to freeze the visible columns.
But the horizontal scrollbar will be hidden if visible column is not visible
within visible range. Please refer the below image for better understanding.
It can be achieved by customizing the ResizeEnd and HScrollPixelPosChanging event. In this customization, the range of columns will be removed from visible columns range when scrollbar reaches that frozen column. These removed columns will be restored to visible range when scroll position is reached to those columns.
C#
this.ResizeEnd += new EventHandler(Form1_ResizeEnd);
this.oGrid.TableControl.HScrollPixelPosChanging += new GridScrollPositionChangingEventHandler(TableControl_HScrollPixelPosChanging);
void Form1_ResizeEnd(object sender, EventArgs e)
{
int fieldIndex = Convert.ToInt32(textBox1.Text);
var col = oGrid.TableDescriptor.VisibleColumns[fieldIndex-1];
var last = oGrid.TableControl.ViewLayout.LastVisibleCol;
if (col != null)
{
if (last < fieldIndex + 2 && buttonClick)
{
oGrid.TableModel.ResetColHiddenEntries();
oGrid.TableDescriptor.FrozenColumn = "";
oGrid.TableControl.SetCurrentHScrollPixelPos(1);
notfrozenview = true;
frozenview = false;
}
else if (buttonClick)
{
oGrid.TableDescriptor.FrozenColumn = col.Name;
frozenview = true;
notfrozenview = false;
}
}
}
void TableControl_HScrollPixelPosChanging(object sender, GridScrollPositionChangingEventArgs e)
{
int fieldIndex = Convert.ToInt32(textBox1.Text);
var col = oGrid.TableDescriptor.VisibleColumns[fieldIndex - 1];
int colpos = 0;
int pixelDelta;
oGrid.TableControl.HScrollPixelPosToColIndex(e.ScrollPosition, out colpos, out pixelDelta);
var LeftmostPixel=oGrid.TableControl.GetHScrollPixelMinimum();
var last = oGrid.TableControl.ViewLayout.LastVisibleCol;
var vCount = oGrid.TableControl.ViewLayout.VisibleColumnsList.Count;
if (colpos==0)
{
e.Cancel = true;
}
if (notfrozenview && buttonClick && last==fieldIndex+1)
{
for (int i = 1; i <= fieldIndex-(vCount-3); i++)
{
GridColHidden hid = new GridColHidden(i);
oGrid.TableModel.ColHiddenEntries.Add(hid);
}
oGrid.TableDescriptor.FrozenColumn = col.Name;
unfreeze = true;
}
if (colpos == fieldIndex + 1 && LeftmostPixel == e.ScrollPosition && unfreeze && !frozenview && buttonClick)
{
oGrid.TableModel.ResetColHiddenEntries();
oGrid.TableDescriptor.FrozenColumn = "";
unfreeze = false;
}
}
VB
AddHandler ResizeEnd, AddressOf Form1_ResizeEnd
AddHandler oGrid.TableControl.HScrollPixelPosChanging, AddressOf TableControl_HScrollPixelPosChanging
Private Sub Form1_ResizeEnd(ByVal sender As Object, ByVal e As EventArgs)
Dim fieldIndex As Integer = Convert.ToInt32(textBox1.Text)
Dim col = oGrid.TableDescriptor.VisibleColumns(fieldIndex-1)
Dim last = oGrid.TableControl.ViewLayout.LastVisibleCol
If col IsNot Nothing Then
If last < fieldIndex + 2 AndAlso buttonClick Then
oGrid.TableModel.ResetColHiddenEntries()
oGrid.TableDescriptor.FrozenColumn = ""
oGrid.TableControl.SetCurrentHScrollPixelPos(1)
notfrozenview = True
frozenview = False
ElseIf buttonClick Then
oGrid.TableDescriptor.FrozenColumn = col.Name
frozenview = True
notfrozenview = False
End If
End If
End Sub
Private Sub TableControl_HScrollPixelPosChanging(ByVal sender As Object, ByVal e As GridScrollPositionChangingEventArgs)
Dim fieldIndex As Integer = Convert.ToInt32(textBox1.Text)
Dim col = oGrid.TableDescriptor.VisibleColumns(fieldIndex - 1)
Dim colpos As Integer = 0
Dim pixelDelta As Integer
oGrid.TableControl.HScrollPixelPosToColIndex(e.ScrollPosition, colpos, pixelDelta)
Dim LeftmostPixel =oGrid.TableControl.GetHScrollPixelMinimum()
Dim last = oGrid.TableControl.ViewLayout.LastVisibleCol
Dim vCount = oGrid.TableControl.ViewLayout.VisibleColumnsList.Count
If colpos=0 Then
e.Cancel = True
End If
If notfrozenview AndAlso buttonClick AndAlso last = fieldIndex + 1 Then
For i As Integer = 1 To fieldIndex - (vCount - 3)
Dim hid As New GridColHidden(i)
oGrid.TableModel.ColHiddenEntries.Add(hid)
Next i
oGrid.TableDescriptor.FrozenColumn = col.Name
_unfreeze = True
End If
If colpos = fieldIndex + 1 AndAlso LeftmostPixel = e.ScrollPosition AndAlso _unfreeze AndAlso (Not frozenview) AndAlso buttonClick Then
oGrid.TableModel.ResetColHiddenEntries()
oGrid.TableDescriptor.FrozenColumn = ""
_unfreeze = False
End If
End Sub
The screenshot below illustrates the frozen column along with the horizontal scrollbar.
Samples:
Conclusion
I hope you enjoyed learning about how to set the scrollbar in GridGroupingControl.
You can refer to our WinForms GridGroupingControl feature tour page to know about its other groundbreaking feature representations. You can also explore our WinForms GridGroupingControl documentation to understand how to create and manipulate data.
For current customers, you can check out our components from the License and Downloads page. If you are new to Syncfusion, you can try our 30-day free trial to check out our other controls.
If you have any queries or require clarifications, please let us know in the comments section below. You can also contact us through our support forums, Direct-Trac, or feedback portal. We are always happy to assist you!