繁体   English   中英

C#Propertygrid默认值typeconverter

[英]C# Propertygrid default value typeconverter

我有一个带下拉框的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"]);
        }
    }
}

您是否尝试过在System.ComponentModel中使用DefaultValueAttribute

从MSDN:

您可以创建具有任何值的DefaultValueAttribute。 成员的默认值通常是其初始值。 视觉设计师可以使用默认值来重置成员的值。

private bool myVal=false;

[DefaultValue(false)]
 public bool MyProperty {
    get {
       return myVal;
    }
    set {
       myVal=value;
    }
 }

在PropertyGrid中显示对象之前,必须先分配该对象的ScreenId属性值。 实际上,您必须运行dbase查询两次。 一旦知道要分配给ScreenId的值,就在类型转换器中再次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM