How can I tell whether a scrollbar is visible in my DataGrid is visible

If you are using a derived DataGrid, then you can check the Visible property on the protected VertScrollBar property of DataGrid. So, you could check Me.VertScrollBar.Visible from within your derived DataGrid. To check it without access to the protected scrollbar properties is a little more work, but possible. One technique is to loop through the Controls property of the DataGrid looking for the scrollbar, and then checking its visible property at that time. [C#] //sample usage bool vSrollBarVisible = this.IsScrollBarVisible(this.dataGrid1); ….. private bool IsScrollBarVisible(Control aControl) { foreach(Control c in aControl.Controls) { if (c.GetType().Equals(typeof(VScrollBar))) { return c.Visible; } } return false; } [VB.NET] ’sample usage Dim vScrollBarVisible = Me.IsScrollBarVisible(Me.DataGrid1) …… Private Function IsScrollBarVisible(ByVal aControl As Control) As Boolean Dim c As Control For Each c In aControl.Controls If c.GetType() Is GetType(VScrollBar) Then Return c.Visible End If Next Return False End Function

How can I prevent all the cells in my DataGrid from being edited without deriving GridColumnStyle

One solution is to remove all the editing controls from the DataGrid.Controls collection. Without these controls, the grid contents cannot be edited. There is a technical problem that requires a little care. You do not want to delete all the controls in DataGrid.Controls as you would lose your scrollbars. The code below deletes all controls except the scrollbars. Alternatively, you could also loop through the controls and only delete the TextBox. [C#] ArrayList al = new ArrayList(); foreach(Control c in this.dataGrid1.Controls) { if(c.GetType() == typeof(VScrollBar) || c.GetType() == typeof(HScrollBar)) { al.Add(c); } } this.dataGrid1.Controls.Clear(); this.dataGrid1.Controls.AddRange((Control[]) al.ToArray(typeof(Control))); [VB.NET] Dim al As New ArrayList() Dim c As Control For Each c In Me.dataGrid1.Controls If c.GetType() = GetType(VScrollBar) Or c.GetType() = GetType(HScrollBar) Then al.Add(c) End If Next c Me.dataGrid1.Controls.Clear() Me.dataGrid1.Controls.AddRange(CType(al.ToArray(GetType(Control)), Control()))

How do I move columns in a 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