2011-12-04 36 views
6

Tôi đang cố gắng lấy dữ liệu từ cơ sở dữ liệu theo mục được chọn trong ComboBox nhưng khi tôi cố gắng truy cập vào mục ComboBox đã chọn, nó mang lại cho tôi "System.Data.DataRowView "Lấy System.Data.DataRowView trong khi nhận giá trị từ ComboBox

tôi đã làm điều tương tự với một truy vấn chọn đơn giản chức năng khác và hoạt động tốt nhưng tôi không biết tại sao nó không hoạt động trong truy vấn này [...?]:

_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() + "'"; 

Ai có thể cho tôi biết điều gì có thể là vấn đề?

Trả lời

14

SelectedItem là đối tượng dữ liệu được liên kết với nguồn dữ liệu của ComboBox, trong trường hợp này là DataRowView.

Bạn cần phải truyền SelectedItem đến DataRowView, sau đó truy xuất giá trị thích hợp từ nó.

Bạn có thể làm điều này như sau:

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

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

sau đó thay thế (trong CommandText của bạn):

cmbLeader.SelectedItem.ToString() 

với:

sValue 

này một cách duyên dáng sẽ xử lý các trường hợp DataRowView là null.

YourFieldName trong mã trên phải là tên của trường trong nguồn dữ liệu chứa giá trị Tên. Nếu bạn đã đặt tên trường này trong các thuộc tính DisplayMember hoặc ValueMember của combobox, thì bạn chỉ có thể sử dụng thuộc tính này để tiết kiệm cho mình một số cơn đau khi đường này thay đổi hoặc khi bạn muốn sử dụng lại mã này ở nơi khác:

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

Hoặc, bạn có thể sử dụng cmbLeader.SelectedValue.

+0

tôi đã cố gắng sử dụng SelectedValue tôi vẫn nhận được System.Data.DataRowView, làm thế nào tôi có thể đúc từ SelectedItem để DataRowView – jarus

+0

thanx tôi tìm thấy cách để cast SelectedItem để DataRowView String str = ((DataRowView) cmbLeader.SelectedItem) [ "Tên"]. ToString(); – jarus

+0

@jarus: đã cập nhật câu trả lời với chi tiết về cách truyền tới DataRowView. –

1

Khi bạn liên kết với ADO DataTable, bạn thực sự ràng buộc với ADO DataView (là bộ sưu tập của DataRowViews). Điều này có nghĩa là SelectedItem sẽ luôn là DataRowView.

Để có được DataRow liên quan bạn có thể gọi

DataRow row = ((DataRowView)SelectedItem).Row 
0

này cho DropDownList. Nhiều nhà phát triển muốn có được giá trị Thành viên dữ liệu từ danh sách thả xuống bên dưới chức năng sẽ giúp nhận giá trị một cách dễ dàng ... nếu có bất kỳ Nhận xét đề xuất nào bên dưới!

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; 
    } 
Các vấn đề liên quan