Получение System.Data.DataRowView при получении значения из ComboBox - PullRequest
5 голосов
/ 04 декабря 2011

Я пытаюсь получить данные из базы данных в соответствии с элементом, выбранным в ComboBox, но когда я пытаюсь получить доступ к выбранному элементу ComboBox, он выдает мне «System.Data.DataRowView» [...?]

Я сделал то же самое с простым запросом выбора в другой функции, и он отлично работает, но я не знаю, почему он не работает в этом запросе:

_dataAdapter.SelectCommand.CommandText = "SELECT lt.Name FROM Leader as lt LEFT JOIN Material as mt ON lt.Student_id=mt.lead_id where lt.Name=" + "'" + cmbLeader.SelectedItem.ToString() + "'";

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

Ответы [ 3 ]

14 голосов
/ 04 декабря 2011

SelectedItem - это объект данных, связанный с источником данных ComboBox, который в данном случае равен DataRowView.

Вам необходимо привести SelectedItem к DataRowView, а затем извлечь из него соответствующее значение.

Вы можете сделать это следующим образом:

DataRowView oDataRowView = cmbLeader.SelectedItem as DataRowView;
string sValue = "";

if (oDataRowView != null) {
   sValue = oDataRowView.Row["YourFieldName"] as string;
}

затем замените (в вашем CommandText):

cmbLeader.SelectedItem.ToString()

с:

sValue

Это будет корректно обрабатывать случай, когда DataRowView равен нулю.

YourFieldName в приведенном выше коде должно быть имя поля в источнике данных, который содержит значение имени. Если вы задали имя этого поля в свойствах DisplayMember или ValueMember в выпадающем списке, вы можете просто использовать это свойство, чтобы избежать душевных страданий в будущем при изменении этого поля или при повторном использовании этого кода в другом месте. :

   sValue = oDataRowView.Row[cmbLeader.DisplayMember] as string;

В качестве альтернативы вы можете использовать cmbLeader.SelectedValue.

1 голос
/ 04 декабря 2011

Когда вы связываетесь с ADO DataTable, вы действительно связываетесь с ADO DataView (который представляет собой набор DataRowViews).Это означает, что SelectedItem всегда будет DataRowView.

. Чтобы получить связанный DataRow, вы можете позвонить

DataRow row = ((DataRowView)SelectedItem).Row
0 голосов
/ 11 октября 2016

Это для DropDownList. Многие разработчики хотят получить значение элемента данных из раскрывающейся ниже функции, которая поможет получить значение простым способом ... если есть какие-либо комментарии, предложенные ниже!

 public string RadDropDownSelectValue(RadDropDownList radDropDownList)
    {
        string str = "";
        foreach (RadListDataItem item in radDropDownList.SelectedItems)
        {
            DataRowView dv = (DataRowView)item.Value;
            str = dv.Row[0].ToString();
        }
        return str;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...