How do I move columns in a datagrid

Platform: WinForms| Category: Datagrid

The columns appear in the order that their column styles were added to the tablestyle being used by the grid.
If you want to change this order, you would need to create a new table style, and add the columnstyles in the
order you want things to appear. Here is some code snippets that suggest how to do this.

[C#]
public void MoveColumn(DataGrid _dataGrid, string _mappingName, int fromCol, int toCol)
{
	if(fromCol == toCol) return;

	DataGridTableStyle oldTS = _dataGrid.TableStyles[_mappingName];
	DataGridTableStyle newTS = new DataGridTableStyle();
	newTS.MappingName = _mappingName;

	for(int i = 0; i < oldTS.GridColumnStyles.Count; ++i)
	{
		if(i != fromCol && fromCol < toCol)
			newTS.GridColumnStyles.Add(oldTS.GridColumnStyles[i]);
		if(i == toCol)
			newTS.GridColumnStyles.Add(oldTS.GridColumnStyles[fromCol]);
		if(i != fromCol && fromCol > toCol)
			newTS.GridColumnStyles.Add(oldTS.GridColumnStyles[i]);	
	}

	_dataGrid.TableStyles.Remove(oldTS);
	_dataGrid.TableStyles.Add(newTS);
}

//sample usage
private void button1_Click(object sender, System.EventArgs e)
{
	MoveColumn(myDataGrid, 'Customers', 3, 1);
}

[VB.NET]
Public Sub MoveColumn(_dataGrid As DataGrid, _mappingName As String, fromCol As Integer, toCol As Integer)
	If fromCol = toCol Then
		Return
	End If 
	Dim oldTS As DataGridTableStyle = _dataGrid.TableStyles(_mappingName)
	Dim newTS As New DataGridTableStyle()
	newTS.MappingName = _mappingName
   
	Dim i As Integer
	i = 0
   	While i < oldTS.GridColumnStyles.Count
		If i <> fromCol And fromCol < toCol Then
			newTS.GridColumnStyles.Add(oldTS.GridColumnStyles(i))
		End If
		If i = toCol Then
			newTS.GridColumnStyles.Add(oldTS.GridColumnStyles(fromCol))	
		End If
		If i <> fromCol And fromCol > toCol Then
			newTS.GridColumnStyles.Add(oldTS.GridColumnStyles(i))
		End If
		i = i + 1
	End While 
	_dataGrid.TableStyles.Remove(oldTS)
	_dataGrid.TableStyles.Add(newTS)
End Sub ’MoveColumn

’sample usage
Private Sub button1_Click(sender As Object, e As System.EventArgs)
	MoveColumn(myDataGrid, 'Customers', 3, 1)
End Sub ’button1_Click

Share with

Related FAQs

Couldn't find the FAQs you're looking for?

Please submit your question and answer.