Выбранное значение в выпадающем списке в c # - PullRequest
2 голосов
/ 14 февраля 2011

Я работаю над приложением C # .net для Windows. я заполняю комбобокс на моей winform, используя следующее.

cmbEMPType.DataSource = objEntityManager.EmployeeTypes();
cmbEMPType.DisplayMember = "EMPTypeName";
cmbEMPType.ValueMember = "EMPTypeId";

где objEntityManager.EmployeeTypes(); в методе менеджера, который получает список от Linq к серверу sql. это работает нормально.

но когда я выбираю поле со списком формы элемента и нажимаю кнопку, то в событии щелчка кнопки я получаю cmbEMPType.SelectedValue как тип возврата EmpType вместо его Id. зачем это? Я не хочу создавать еще один объект EmpType. нужно просто выбранное значение. также не может сохранять веру с SelectedIndex. может меняться для каждого предмета каждый раз.

**Edited**
      public List<EMPType> EmployeeTypes()
        {
            List<EMPType> EMPTypeList = null;
            try
            {
                if (CommonDataObject.dataContext.EMPAllTypes.Any())
                {
                    EMPTypeList = CommonDataObject.dataContext.EMPAllTypes.ToList();
                }
                return EMPTypeList;
            }
            catch
            {

                return EMPTypeList;
            }

        }

Отредактированный

   private void btnSave_Click(object sender, EventArgs e)
        {

iEMPTypeId = cmbEMPType.SelectedValue;
}

здесь я должен получить inte. но просит создать объект EMPType.

Ответы [ 3 ]

1 голос
/ 08 июля 2011

Проблема в последовательности вашего кода. Пожалуйста, удалите код первой строки до последней строки. Вы получите значение типа int (iEMPTypeId) из cmbEMPType.SelectedValue.

cmbEMPType.DisplayMember = "EMPTypeName"; 
cmbEMPType.ValueMember = "EMPTypeId"; 
cmbEMPType.DataSource = objEntityManager.EmployeeTypes();

iEMPTypeId = cmbEMPType.SelectedValue
1 голос
/ 14 февраля 2011

Это правильное и ожидаемое поведение, его нельзя изменить.

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

Если случайно вы используете SelectedItem, тогда получите такой код для получения идентификатора:

 int selectedID = (cmbEMPType.SelectedItem as EmpType).EMPTypeId;

Для обработки случаев, когда ничего не выбрано:

object oSelectedEmp = cmbEMPType.SelectedItem;
int selectedID = oSelectedEmp == null ? -1 : (oSelectedEmp as EmpType).EMPTypeId;
0 голосов
/ 08 июля 2011

Другой вариант - переопределить функцию toString в вашем классе EMPType. Как сказал Эдвин де Конинг: «Если не указан ValueMember, он дает представление ToString ()».

Что-то вроде (сейчас я не могу это проверить):

public override string ToString()
{
    return this.ID;
}

Вы можете проверить эту статью: http://msdn.microsoft.com/en-us/library/ms173154(v=vs.80).aspx

...