Другой элемент значения, тот же элемент управления - PullRequest
1 голос
/ 16 июня 2009

Редактировать 1

Я считаю, что моя проблема проистекает из следующего. Функция, которая заполняет раскрывающуюся часть, устанавливает для Display Member значение CountyName. Затем, когда я пытаюсь установить SelectedText или EditValue, как было предложено, эта функция возвращает только CountyID, который она пытается сопоставить с чем-либо из списка DropDown DisplayMember. Мне нужно, чтобы это соответствовало чему-то в списке ValueMember.

Используя следующее, я заставил его работать, но это взлом, и я был бы очень признателен за поиск реального решения.

lkuResidenceCounty.ItemIndex = Convert.ToInt32(row["ResidencyCountyID"].ToString());

Оригинальный пост

У меня есть поле поиска (DevExpress) в форме члена, в котором я заполняю возможные значения из БД с помощью этого кода ->

        lkuResidenceCounty.Properties.DataSource = ConnectBLL.BLL.Person.CountyList();
        lkuResidenceCounty.Properties.PopulateColumns();
        lkuResidenceCounty.Properties.DisplayMember = "CountyName";
        lkuResidenceCounty.Properties.ValueMember = "CountyID";
        lkuResidenceCounty.Properties.Columns[0].Visible = false;
        lkuResidenceCounty.Properties.Columns[2].Visible = false;
        lkuResidenceCounty.Properties.Columns[3].Visible = false;

Это работает очень хорошо, так как CountyName отображается, как и ожидалось.

Однако, когда я пытаюсь загрузить значение существующего члена для этого поля, используя приведенное ниже, которое является частью функции, которая берет строку из DataSet ->

lkuResidenceCounty.Properties.ValueMember = row["ResidencyCountyID"].ToString();

Я получаю пустую коробку. Я прошел через код, и верный идентификатор возвращается для участника.

К сожалению, хранимая процедура для заполнения раскрывающихся опций извлекается из таблицы обслуживания со столбцами «CountyName» и «CountyID». Так что это правильно. К сожалению, хранимая процедура для загрузки текущего графства конкретного человека извлекается из таблицы персонала, где есть столбец с именем «ResidencyCountyID». Он назван так, потому что есть также столбец «ResponsibilityCountyID».

Мне нужен способ, чтобы они оба сосуществовали, какие-то решения?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 19 июня 2009

DisplayMember и ValueMember используются для заполнения элемента управления списком выбираемых значений. Чтобы установить выбранное значение заполненного элемента управления LookUpEdit, установите его свойство EditValue :

lkuResidenceCounty.EditValue = row["ResidencyCountyID"].ToString();

В ответ на ваше редактирование: Согласно документации:

Текущая выбранная строка определяет значения для редактируемого значения редактора и отображаемого текста. Значение для BaseEdit.EditValue получается из поля RepositoryItemLookUpEditBase.ValueMember, в то время как текст для отображения в поле редактирования получается из поля RepositoryItemLookUpEditBase.DisplayMember выбранной строки.

При изменении BaseEdit.EditValue, редактор находит и выбирает строку чья RepositoryItemLookUpEditBase.ValueMember поле содержит новое значение. Текст в поле редактирования изменяется, чтобы отразить вновь выбранная строка.

Я не использую эти элементы управления, но мне кажется, что они не должны работать, как вы описали. Я думаю, что ToString () является проблемой, потому что EditValue принимает объект, поэтому он, вероятно, ожидает int для значения. Попробуйте:

lkuResidenceCounty.EditValue = (int)row["ResidencyCountyID"];
1 голос
/ 19 июня 2009

Почему вам нужен один и тот же LookUpEdit, чтобы иметь два значимых члена? Это используется автономно или в сетке? В автономном режиме вы можете поменять два редактора репозитория в зависимости от текущей строки. Но есть ли более 2 возможных значений для ValueMember? Это также усложнит ситуацию.

UPDATE

Глядя на ваше редактирование, мне кажется, я понимаю, что происходит немного больше. Итак, вы не хотите менять свой ValueMember (который ссылается на столбец данных), а хотите изменить значение редактора? Если это так, то вам определенно следует использовать EditValue (а не SelectedText, который, я не думаю, должен быть установлен), и назначить его строке ["value_field"] следующим образом:

lkuResidenceCounty.EditValue = row["ResidencyCountyID"];

Что происходит, когда вы это делаете?

1 голос
/ 16 июня 2009

Свойство ValueMember сообщает списку, из какого поля нужно извлечь при установке свойства Value. После того, как для ValueMember установлено значение «CountyID», тогда, когда список имеет привязку к данным, он установит свойства значений всех элементов списка в поля CountyID их соответствующих объектов.

Следовательно, вы не должны делать:

lkuResidenceCounty.Properties.ValueMember = row["ResidencyCountyID"].ToString();

а точнее

lkuResidenceCounty.Properties.ValueMember = "CountyID";

было прекрасно, если вы правильно определили поле, которое пытаетесь найти. Как только список получит данные, вы увидите ожидаемые результаты.

Однако, глядя на ваш код, кажется, что вы не соответствуете своему полю. В одном месте вы используете ResidencyCountyID, а в другом - CountyID. Это, скорее всего, ваш источник путаницы. Выясните, каково действительное имя поля, и убедитесь, что для него установлен ValueMember.

UPDATE

После прочтения вашего комментария вы ищете свойство SelectedValue. Свойство SelectedValue указывает списку принудительно выбирать выбранное значение для любого введенного вами значения.

По сути, у вас здесь происходит две вещи. ValueMember сообщает списку, что использовать в качестве значения из вашего источника данных, и SelectedValue, который сообщает списку, каким должно быть текущее выбранное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...