我有一个带有下拉框的propertygrid。在我的应用程序中,用户可以单击一个块,然后该块的属性显示在一个propertygrid中。但是第一次点击一个块时,下拉列表中会显示一个无效值(0)。如何确保显示有效值?
以下是TypeConverter的一些代码:
public class DynamicFormScreenId : Int32Converter
{
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
Database database = new Database();
database.StoredProcedureName = "SP naam";
int[] id = null;
if (database.ExecuteStoredProcedure())
{
int totalIds = database.DataTable.Rows.Count;
id = new int[totalIds];
for (int i = 0; i < totalIds; i++)
{
id[i] = Convert.ToInt32(database.DataTable.Rows[i][0]);
}
}
return new StandardValuesCollection(id);
}
public override bool GetStandardValuesExclusive(
ITypeDescriptorContext context)
{
return true;
}
}
我班上的财产:
[TypeConverter(typeof(DynamicFormScreenId)),
CategoryAttribute("Screen Settings"),
Description("The id of the screen")]
public int ScreenId
{
get { return _screenId; }
set { _screenId = value; }
}
解
我在构造函数中设置了ScreenId的默认值:
private void Constructor(string name)
{
_controlName = name;
// Set screenId default value
Database database = new Database("connectionstring");
database.StoredProcedureName = "mySP";
if (database.ExecuteStoredProcedure())
{
if (database.DataTable.Rows.Count > 0)
{
_screenId = Convert.ToInt32(database.DataTable.Rows[0]["id"]);
}
}
}
答案 0 :(得分:1)
您是否尝试过System.ComponentModel中的DefaultValueAttribute?
来自MSDN:
您可以创建DefaultValueAttribute 有任何价值。会员的默认值 value通常是其初始值。 视觉设计师可以使用默认设置 值以重置成员的值。
private bool myVal=false;
[DefaultValue(false)]
public bool MyProperty {
get {
return myVal;
}
set {
myVal=value;
}
}
答案 1 :(得分:1)
在PropertyGrid中显示对象之前,必须先分配对象的ScreenId属性值。实际上,您必须运行两次dbase查询。一旦知道要分配给ScreenId的值,再次在类型转换器中。