|
5.2 How can I autosize the rowheights in my datagrid?
|
Here is a solution suggested by Matthew Benedict. It uses reflection to access the protected DataGridRows collection so he can
set the row height.
|
public void AutoSizeGrid()
|
// DataGrid should be bound to a DataTable for this part to
|
int numRows = ((DataTable)gridTasks.DataSource).Rows.Count;
|
Graphics g = Graphics.FromHwnd(gridTasks.Handle);
|
StringFormat sf = new StringFormat(StringFormat.GenericTypographic);
|
// Since DataGridRows[] is not exposed directly by the DataGrid
|
// we use reflection to hack internally to it.. There is actually
|
// a method get_DataGridRows that returns the collection of rows
|
// that is what we are doing here, and casting it to a System.Array
|
MethodInfo mi = gridTasks.GetType().GetMethod("get_DataGridRows",
|
BindingFlags.FlattenHierarchy | BindingFlags.IgnoreCase | BindingFlags.Instance
|
| BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static);
|
System.Array dgra = (System.Array)mi.Invoke(gridTasks,null);
|
// Convert this to an ArrayList, little bit easier to deal with
|
// that way, plus we can strip out the newrow row.
|
ArrayList DataGridRows = new ArrayList();
|
foreach (object dgrr in dgra)
|
if (dgrr.ToString().EndsWith("DataGridRelationshipRow")==true)
|
// Now loop through all the rows in the grid
|
for (int i = 0; i < numRows; ++i)
|
// Here we are telling it that the column width is set to
|
// 400.. so size will contain the Height it needs to be.
|
size = g.MeasureString(gridTasks[i,1].ToString(),gridTasks.Font,400,sf);
|
int h = Convert.ToInt32(size.Height);
|
// Little extra cellpadding space
|
// Now we pick that row out of the DataGridRows[] Array
|
// that we have and set it's Height property to what we
|
PropertyInfo pi = DataGridRows[i].GetType().GetProperty("Height");
|
pi.SetValue(DataGridRows[i],h,null);
|
// I have read here that after you set the Height in this manner that you should
|
// Call the DataGrid Invalidate() method, but I haven't seen any prob with not calling it..
|
|
|
|