2013-04-13 53 views
9

Tôi gặp sự cố khi cố gắng lấy giá trị ValueMember mà tôi đã đặt. Tôi đang cố gắng sử dụng một combobox để chọn một báo cáo biểu mẫu cửa sổ. Tôi có thể lấy Tên nhưng không phải là RptValue. Đây là mã của tôi:Cách lấy giá trị ValueMember từ ComboBox C# Winforms?

 private class Data 
    { 
     public string Name { get; set; } 
     public string RptValue { get; set; } 
    } 

    private void BaseForm_Load(object sender, EventArgs e) 
    { 
     this.rvDoctorReportViewer.RefreshReport(); 
     comboBox1.Items.Add(new Data { Name="Select", RptValue="Select"}); 
     comboBox1.Items.Add(new Data { Name = "All Food Values", RptValue = "AllFoodValues.rdlc" }); 
     comboBox1.Items.Add(new Data { Name = "All Readings", RptValue = "AllReadings.rdlc" }); 
     comboBox1.Items.Add(new Data { Name = "Avg Food Values by Date", RptValue = "AvgFoodValuesByDate.rdlc" }); 
     comboBox1.Items.Add(new Data { Name = "Avg Food Values by Meal", RptValue = "AvgFoodValuesByMeal.rdlc" }); 
     comboBox1.Items.Add(new Data { Name = "Avg Readings by Date", RptValue = "AvgReadingsByDate.rdlc" }); 
     comboBox1.Items.Add(new Data { Name = "Avg Readings by Time", RptValue = "AvgReadingsByTime.rdlc" }); 
     comboBox1.Items.Add(new Data { Name = "Avg Readings by Event", RptValue = "AvgReadingsByEvent.rdlc" }); 
     comboBox1.Items.Add(new Data { Name = "Blood Pressure Chart", RptValue = "BPChart.rdlc" }); 
     comboBox1.Items.Add(new Data { Name = "Blood Pressure Report", RptValue = "BPReport.rdlc" }); 
     comboBox1.Items.Add(new Data { Name = "Detail Food Values by Meal", RptValue = "DetailFoodValuesByMeal.rdlc" }); 
     comboBox1.Items.Add(new Data { Name = "Doctor Detail Report", RptValue = "DoctorDetailReport.rdlc" }); 
     comboBox1.Items.Add(new Data { Name = "Food Chart", RptValue = "FoodChart.rdlc" }); 
     comboBox1.Items.Add(new Data { Name = "Pumper Detail Report", RptValue = "PumperDetailReport.rdlc" }); 
     comboBox1.Items.Add(new Data { Name = "Reading Charts", RptValue = "ReadingCharts.rdlc" }); 
     comboBox1.Items.Add(new Data { Name = "Total Daily Food Intake", RptValue = "TotalIntakeDailyFood.rdlc" }); 
     comboBox1.DisplayMember = "Name"; // This works fine 
     comboBox1.ValueMember = "RptValue"; // This is the problem. It renders as RptValue instead of the value 
     comboBox1.SelectedIndex = 0; 
    } 

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (comboBox1.SelectedIndex > 0) 
     { 
      string strReport; 
      strReport = "ReportViewer." + comboBox1.ValueMember.ToString(); 
      rvDoctorReportViewer.Reset(); 
      rvDoctorReportViewer.LocalReport.ReportEmbeddedResource = strReport; 
      this.rvDoctorReportViewer.RefreshReport(); 
     } 
    } 

Trả lời

15

Bạn nên sử dụng thuộc tính DataSource. Hãy thử điều này:

BindingList<Data> _comboItems = new BindingList<Data>(); 
_comboItems.Add(new Data { Name = "Select", RptValue = "Select" }); 
_comboItems.Add(new Data { Name = "All Food Values", RptValue = "AllFoodValues.rdlc" }); 
... 
comboBox1.DataSource = _comboItems; 
comboBox1.DisplayMember = "Name"; 
comboBox1.ValueMember = "RptValue"; 

Và sau đó truy cập giá trị được chọn:

strReport = "ReportViewer." + comboBox1.SelectedValue; 
+0

Ok, bây giờ tôi nhận được một lỗi khác nhau trên tự báo cáo. Nó nói "Đã xảy ra lỗi trong quá trình xử lý báo cáo cục bộ. Định nghĩa báo cáo cho" reportname "chưa được chỉ định. Tham chiếu đối tượng không được đặt thành phiên bản của đối tượng". Bất kỳ ý tưởng? – bbcompent1

+0

@ bbcompent1 Không thể nói bất cứ điều gì chắc chắn mà không nhìn thấy một số mã. :) Tôi đoán nó có cái gì để làm với 'ReportPath' (nhưng tôi không chắc chắn). Tôi sẽ khuyên bạn nên đăng câu hỏi mới về vấn đề cụ thể này. – MAV

+0

Ok, sẽ làm. cảm ơn một lần nữa – bbcompent1

5
String s; 
    s=comboBox1.SelectedValue.tostring() 
0

này đã làm việc cho tôi:

combobox.valuemember="id" 
    combobox.displaymember="name" 
    combobox.datasource=dt 
Các vấn đề liên quan