Вопрос

Правка 1

Я полагаю, что моя проблема проистекает из следующего.Функция, которая заполняет выпадающую часть, присваивает элементу Отображения значение CountyName.Затем, когда я пытаюсь установить SelectedText или EditValue, как было предложено, эта функция возвращает только идентификатор округа, который она пытается сопоставить с чем-либо в выпадающем списке 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 отображается, как и ожидалось.

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

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

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

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

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

Спасибо!

Это было полезно?

Решение

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

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

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

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

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

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

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

Другие советы

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

Следовательно, вам не следует делать:

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

но скорее

lkuResidenceCounty.Properties.ValueMember = "CountyID";

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

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

Обновить

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

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

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

Обновить

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

lkuResidenceCounty.EditValue = row["ResidencyCountyID"];

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top