我知道这被问了几百万次,但我不知道如何定义我的搜索,所以请耐心等待 我想制定方法,在控制动力上设置一些属性,参考发送到方法的刺。
类似这样的事情
public void SetGridColumnProperty(ref DataGridView grid,string columnName, string propretyName, string propertyValue )
{
grid.Columns[columnName].("I know this can't be done as this") = propertyValue;
}
如果我的问题难以理解,我道歉 这就是我想做的事 我正在制作WinForms应用程序,它正在使用很多数据网格视图来显示和编辑数据 因为我需要经常更改我的网格的外观,添加列编辑顺序和其他我的想法是为表单上的每个DataGird保存某种元数据,并且当我在加载之前向用户显示表单时 我的表单通过连接元数据和特定网格的属性来设置网格的属性 我希望将配置文件分隔为XML或DataBase中的实际代码,因此当我对我的应用程序进行编辑时,我不必重新编译新代码,只需更改我的xml,然后在下一个loding forom它看起来像我喜欢
答案 0 :(得分:7)
首先,不需要使用ref
关键字,因为DataGridView
是引用类型。其次,这是解决方案:
public void SetGridColumnProperty(DataGridView grid, string columnName, string propertyName, object propertyValue)
{
DataGridViewColumn dgvColumn = grid.Columns[columnName];
typeof(DataGridViewColumn).GetProperty(propertyName).SetValue(dgvColumn, propertyValue, null);
}
样品:
SetGridColumnProperty(dataGridView1, "ColumnName", "Width", 500);
更新:在调用SetValue方法之前,检查CanWrite
类的PropertyInfo
属性。
答案 1 :(得分:5)
好的,所以你在谈论反思。您可以查找大量将引用Reflection命名空间的资源。
为了让您开始设置属性,您可能希望沿着以下行使用MethodInfo:
MethodInfo invokedMethod = grid.GetType().GetProperty("propertyName").GetSetMethod();
invokedMethod.Invoke(targetObject, parameters);
答案 2 :(得分:4)
这可以使用反射来完成,查看您需要的类型GetProperties。这将为每个属性返回一组PropertyInfo个对象。检查CanWrite
是否为您需要的属性返回true,然后使用SetValue
设置您的属性值。
答案 3 :(得分:4)
您可以使用PropertyInfo
获取控件的属性并指定其值
public void SetGridColumnProperty(ref DataGridView grid,string columnName, string propretyName, string propertyValue )
{
PropertyInfo pInfo = grid.GetType().GetProperty(propretyName);
if (pInfo != null)
{
TypeConverter tc = TypeDescriptor.GetConverter(pInfo.PropertyType);
if (tc.CanConvertFrom(Type.GetType(propertyValue.GetType().ToString())))
{
valToSet = tc.ConvertFromString(propertyValue);
pInfo.SetValue(grid, valToSet, null);
}
}
}
希望这会有所帮助