C # Propertygrid значение по умолчанию typeconverter - PullRequest
0 голосов
/ 11 января 2010

У меня есть таблица свойств с выпадающим списком. В моем приложении пользователь может щелкнуть блок, а затем свойства этого блока отображаются в сетке свойств. Но в первый раз, когда они нажимают на блок, в выпадающем списке отображается недопустимое значение (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"]);
        }
    }
}

Ответы [ 2 ]

1 голос
/ 11 января 2010

Вам нужно будет присвоить значение свойства ScreenId объекта, прежде чем показывать его в PropertyGrid. По сути, вы должны выполнить запрос dbase дважды. Чтобы узнать какое значение присвоить ScreenId, снова в преобразователе типов.

1 голос
/ 11 января 2010

Вы пробовали DefaultValueAttribute в System.ComponentModel?

Из MSDN:

Вы можете создать DefaultValueAttribute с любым значением. Член по умолчанию значение обычно является его начальным значением. Визуальный дизайнер может использовать по умолчанию значение для сброса значения элемента.

private bool myVal=false;

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