积极答复者
如何设置DataGrid 行高?

问题
答案
-
试试一下两个函数:
public void SetGridDefaultRowHeight(DataGrid dg, int cy)
{
FieldInfo fi = dg.GetType().GetField("m_cyRow",
BindingFlags.NonPublic|
BindingFlags.Static|
BindingFlags.Instance);
fi.SetValue(dg, cy);
dg.GetType().GetMethod("_DataRebind",
BindingFlags.NonPublic|
BindingFlags.Static|
BindingFlags.Instance).Invoke(dg, new object[] {});
}
public void SetGridRowHeight(DataGrid dg, int nRow, int cy)
{
ArrayList arrRows = (ArrayList)dg.GetType().GetField("m_rlrow",
BindingFlags.NonPublic|
BindingFlags.Static|
BindingFlags.Instance).GetValue(dg);
object row = arrRows[nRow];
row.GetType().GetField("m_cy",
BindingFlags.NonPublic|
BindingFlags.Static|
BindingFlags.Instance).SetValue(row, cy);
}
调用完毕上述函数, 请记得手动重绘,Grid.Invalidate()
另外, 利用反射你可以充分的自定义DataGrid的一些隐藏属性,并使用它的一些非公开的方法, 比如以下代码打印了所有DataGrid的隐藏属性:
System.Reflection.FieldInfo[] fis = typeof(DataGrid).GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); foreach (var fi in fis) { System.Diagnostics.Debug.WriteLine(fi.Name +" "+ fi.FieldType.ToString()); }
http://blogs.msdn.com/netcfteam/archive/2006/04/25/583542.aspx
Goodluck~
黄季冬
http://fox23.cnblogs.com
I'm a device.- 已标记为答案 moseszhou 2009年4月13日 14:24
全部回复
-
-
楼主可以参考博客园中的这两个帖子,提到了datagrid中内容显示自动换行的问题。
不是在Asp.net 中哦,是在Mobile中。
Datagrid为什么不自动换行显示
轻松搞定DataGrid的项自动换行
施炯 -
试试一下两个函数:
public void SetGridDefaultRowHeight(DataGrid dg, int cy)
{
FieldInfo fi = dg.GetType().GetField("m_cyRow",
BindingFlags.NonPublic|
BindingFlags.Static|
BindingFlags.Instance);
fi.SetValue(dg, cy);
dg.GetType().GetMethod("_DataRebind",
BindingFlags.NonPublic|
BindingFlags.Static|
BindingFlags.Instance).Invoke(dg, new object[] {});
}
public void SetGridRowHeight(DataGrid dg, int nRow, int cy)
{
ArrayList arrRows = (ArrayList)dg.GetType().GetField("m_rlrow",
BindingFlags.NonPublic|
BindingFlags.Static|
BindingFlags.Instance).GetValue(dg);
object row = arrRows[nRow];
row.GetType().GetField("m_cy",
BindingFlags.NonPublic|
BindingFlags.Static|
BindingFlags.Instance).SetValue(row, cy);
}
调用完毕上述函数, 请记得手动重绘,Grid.Invalidate()
另外, 利用反射你可以充分的自定义DataGrid的一些隐藏属性,并使用它的一些非公开的方法, 比如以下代码打印了所有DataGrid的隐藏属性:
System.Reflection.FieldInfo[] fis = typeof(DataGrid).GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); foreach (var fi in fis) { System.Diagnostics.Debug.WriteLine(fi.Name +" "+ fi.FieldType.ToString()); }
http://blogs.msdn.com/netcfteam/archive/2006/04/25/583542.aspx
Goodluck~
黄季冬
http://fox23.cnblogs.com
I'm a device.- 已标记为答案 moseszhou 2009年4月13日 14:24
-
试试一下两个函数:
谢谢,你的这个方法挺好的,可以满足我的要求
public void SetGridDefaultRowHeight(DataGrid dg, int cy)
{
FieldInfo fi = dg.GetType().GetField("m_cyRow",
BindingFlags.NonPublic|
BindingFlags.Static|
BindingFlags.Instance);
fi.SetValue(dg, cy);
dg.GetType().GetMethod("_DataRebind",
BindingFlags.NonPublic|
BindingFlags.Static|
BindingFlags.Instance).Invoke(dg, new object[] {});
}
public void SetGridRowHeight(DataGrid dg, int nRow, int cy)
{
ArrayList arrRows = (ArrayList)dg.GetType().GetField("m_rlrow",
BindingFlags.NonPublic|
BindingFlags.Static|
BindingFlags.Instance).GetValue(dg);
object row = arrRows[nRow];
row.GetType().GetField("m_cy",
BindingFlags.NonPublic|
BindingFlags.Static|
BindingFlags.Instance).SetValue(row, cy);
}
调用完毕上述函数, 请记得手动重绘,Grid.Invalidate()
另外, 利用反射你可以充分的自定义DataGrid的一些隐藏属性,并使用它的一些非公开的方法, 比如以下代码打印了所有DataGrid的隐藏属性:
System.Reflection.FieldInfo[] fis = typeof(DataGrid).GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); foreach (var fi in fis) { System.Diagnostics.Debug.WriteLine(fi.Name +" "+ fi.FieldType.ToString()); }
http://blogs.msdn.com/netcfteam/archive/2006/04/25/583542.aspx
Goodluck~
黄季冬
http://fox23.cnblogs.com
I'm a device.