1、已经设置和那个表中的那个字段显示的值有哪些,这个数据是存在数据库的,用数据库的表名和字段名称能找到这个字段可以显示的值.2、而数据中的有些基础数据表都对应了一个实体类,这些也已经做好3、我写了两个类
一个是继承自TypeConverter,用于控制属性为下拉属性
class MyConverter:TypeConverter
{
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
List<string> lstValues = CommonDropDownValue.GetData(MyParam.TableName, MyParam.FieldName);
return new StandardValuesCollection(lstValues.ToArray());
} public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
{
return CommonDropDownValue.AllowInput;
} public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
}
二个是传递参数的类,类里用的是静态成员
class MyParam
{
private static string strTableName;
private static string strFieldName;
public static string TableName
{
get { return strTableName; }
set { strTableName = value; }
} public static string FieldName
{
get { return strFieldName; }
set { strFieldName = value; }
}
public static List<string> GetData()//获取数据库表中字段对应的值
{
List<string> Result = new List<string>();
DataSet ds = ds = DbHelper.getDataSet(strTableName, strFieldName);//用于获取数据的
//////////////////////////////////////相关代码,这里不再写了
//////////////////////////////////////
return Result;
}
}
而使用的时候是这样的,我在这里举个例子:
class MyObject//实体类
{
private string strClass;
[TypeConverter(typeof(MyConverter))]
public string ClassName
{
get{return strClass;}
set{strClass = value;}
}
//。。可能有一个类有几个都要配置成可以动态属性值的
}
调用代码
MyParam.TableName = "班级表";
MyParam.FieldName = "班级";//设置参数
MyObject obj = new MyObject();
this.PropertyGrid1.SelectedObject = obj;现在的问题是如果一个实体类中只有一个需要弄成动态的属性,那我的这个方法可以实现,但是有多个的话就不行了,因为参数是上面那样的,所以请教一下各位应该怎么弄,希望能提供一下思路!!!!!!
一个是继承自TypeConverter,用于控制属性为下拉属性
class MyConverter:TypeConverter
{
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
List<string> lstValues = CommonDropDownValue.GetData(MyParam.TableName, MyParam.FieldName);
return new StandardValuesCollection(lstValues.ToArray());
} public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
{
return CommonDropDownValue.AllowInput;
} public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
}
二个是传递参数的类,类里用的是静态成员
class MyParam
{
private static string strTableName;
private static string strFieldName;
public static string TableName
{
get { return strTableName; }
set { strTableName = value; }
} public static string FieldName
{
get { return strFieldName; }
set { strFieldName = value; }
}
public static List<string> GetData()//获取数据库表中字段对应的值
{
List<string> Result = new List<string>();
DataSet ds = ds = DbHelper.getDataSet(strTableName, strFieldName);//用于获取数据的
//////////////////////////////////////相关代码,这里不再写了
//////////////////////////////////////
return Result;
}
}
而使用的时候是这样的,我在这里举个例子:
class MyObject//实体类
{
private string strClass;
[TypeConverter(typeof(MyConverter))]
public string ClassName
{
get{return strClass;}
set{strClass = value;}
}
//。。可能有一个类有几个都要配置成可以动态属性值的
}
调用代码
MyParam.TableName = "班级表";
MyParam.FieldName = "班级";//设置参数
MyObject obj = new MyObject();
this.PropertyGrid1.SelectedObject = obj;现在的问题是如果一个实体类中只有一个需要弄成动态的属性,那我的这个方法可以实现,但是有多个的话就不行了,因为参数是上面那样的,所以请教一下各位应该怎么弄,希望能提供一下思路!!!!!!
解决方案 »
- winform,想要分的请进来
- VB改C# 直接翻译 不要留废话 只要翻译完 立马给分,在线等待!!
- 窗体闪烁问题
- 如何显示当前系统所有应用程序
- 如何隐藏被调用程序.
- 请问如何将一个汉字拆分成2位的byte?列入打拆分成0x**和0x**.
- =============为什么只能存入前面16个汉字???=================
- 各位大侠,救救吧,折腾一中午啦。System.Data.SqlClient.SqlException”类型的异常出现在 system.data.dll 中
- c#读取.txt文件,中文乱码问题
- 高分求助!不够可以加!
- vs2008用“复制网站”功能复制到远程网站
- 如何让汉字旋转90度
[DbColumn(TableName = "table1", FieldName = "column8")] //<---
[TypeConverter(typeof(MyConverter))]
public string ClassName
{
//...
}class DbColumnAttribute : Attribute
{
public string TableName { get; set; }
public string FieldName { get; set; }
}class MyConverter:TypeConverter
{
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
DbColumnAttribute db = context.PropertyDescriptor.Attributes[typeof(DbColumnAttribute)] as DbColumnAttribute; //<---
List<string> lstValues = CommonDropDownValue.GetData(db.TableName, db.FieldName); //<---
return new StandardValuesCollection(lstValues.ToArray());
}
//...
}
谁还有办法如果不介意的话也可以拿来分享一下,我在此多谢了
{
//true下拉框不可编辑
return false;
}
public class ValueEditor : UITypeEditor
{
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.Modal;
} public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, System.IServiceProvider provider, object value)
{
if (context == null || provider == null || context.Instance == null)
{
return base.EditValue(provider, value);
} IWindowsFormsEditorService _editorService = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService)); if (_editorService == null)
{
return base.EditValue(provider, value);
}
else
{
//编辑画面
Form fms = new Form();
fms.ShowDialog();
value =
} return value; }
}
下面是我的代码:
private string strFieldType; public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
CommonParamAttribute Param = context.PropertyDescriptor.Attributes[typeof(CommonParamAttribute)] as CommonParamAttribute;
List<string> lstValues = this.GetData(Param.TableName, Param.FieldName);
return new StandardValuesCollection(lstValues.ToArray());
} public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
{
return false;
} public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
{
//true下拉框不可编辑
return false;
} public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
//true表示显示下拉框
return true;
}
这样应该就可以像输文本框一样输入了。我试了是可以的啊
最简单的解决方法就是继承StringConverter,既把你代码中的class MyConverter:TypeConverter换成:class class MyTypeConverter : StringConverter
{
}
C#动态创建属性
http://dev.firnow.com/course/4_webprogram/asp.net/netjs/2007112/81905.html