2010-06-22 2 views
2

В проекте в C# (.Net 2.0) я использую свойствоgrid. Это свойствоgrid отображает объекты, извлеченные из бэкэнда PHP через SOAP. Некоторые объекты содержат строковые свойства, где значение пустой строки отличается от значения строки NULL. Примером объекта, возвращаемого при вызове SOAP может быть:Свойство свойства C# nullable

SomeObject { 
    PropertyA = "Foo" 
    PropertyB = "Bar" 
    PropertyC = Null 
} 

До тех пор, пока я не «трогать» PropertyC в PropertyGrid, значение PropertyC останется нулевой. Когда я ввожу «foobar» в качестве значения, а затем очищаю текст в propertygrid для PropertyC, значение будет равно пустой строке. Все это в порядке; пользователь должен иметь возможность «вводить» пустую строку. Но я также хочу, чтобы пользователь мог указать «нулевое» значение.

Способ, которым я представляю, это то, что пользователь может щелкнуть правой кнопкой мыши значение свойства, а контекстное меню появится с опцией «Очистить значение», которая установит значение в Null.

Важно: я не хотите использовать «магическое значение» как строки «Null» или «Magix123», чтобы указать значение должно быть нулевым. Конечно, бэкэнд мог интерпретировать эти значения и хранить фактический нуль, но это «решение», помимо простого и грязного, не требуется, потому что это потребует изменения большого количества кода повсюду, обрабатывающего «Волшебные значения».

В идеале PropertyGrid также отображает нулевое значение как («серое») », чтобы пользователь мог видеть разницу между пустой строкой и значением Null.

У кого-нибудь есть идея, как справиться с такой ситуацией? Позволяет ли (.Net 2.0!) PropertyGrid мне делать такие вещи? И как мне тогда понадобиться? Должен ли я создать свой собственный usercontrol, полученный из PropertyGrid, или у PropertyGrid есть некоторые функции, которые я пропустил?

ответ

2

Добавление DefaultValueAttribute со значением по умолчанию null должно содержать команду Reset в контекстном меню. Для дальнейшей настройки вам, вероятно, придется добавить EditorAttribute и написать обычай UITypeEditor.

+0

Вы должны шутить. Так просто? Jeeeeeez ... LOL Я пойду проверю это и дам вам знать. Благодаря! – RobIII

+0

По крайней мере теоретически это должно быть так просто. Существует множество функциональных возможностей и магии, интегрированных во многие элементы управления. –

+0

Хммм, я добавил [DefaultValue (null)] свойство в файле Reference.cs, но команда «reset» недоступна. Может быть, я делаю что-то не так. Я работаю над этим ... любая помощь/советы приветствуются. Также; Мне нужно будет выяснить, как применять эти изменения в другом месте, чем References.cs, потому что этот файл всегда будет перезаписан (regenereated) при обновлении веб-ссылки. Я думаю, что частичные классы - это путь? – RobIII

Смежные вопросы