C # Propertygrid свойство обнуляемое - PullRequest
2 голосов
/ 22 июня 2010

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

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

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

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

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

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

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

1 Ответ

2 голосов
/ 22 июня 2010

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

...