2013-04-13 13 views
9

Mam problem z uzyskaniem wartości ValueMember, którą ustawiłem. Próbuję użyć combobox, aby wybrać raport formularzy systemu Windows. Mogę uzyskać nazwę, ale nie RptValue. Oto mój kod:Jak uzyskać wartość ValueMember z ComboBox C# WinForm?

 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(); 
     } 
    } 

Odpowiedz

15

Powinieneś użyć właściwości DataSource. Spróbuj tego:

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"; 

A następnie uzyskać dostęp do wybranej wartości:

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

Ok, teraz ja dostaję inną Błąd na zgłoś się. Jest napisane: "Wystąpił błąd podczas lokalnego przetwarzania raportów, definicja raportu dla" nazwa raportu "nie została określona. Odwołanie do obiektu nie jest ustawione na wystąpienie obiektu." Jakieś pomysły? – bbcompent1

+0

@ bbcompent1 Nie mogę nic powiedzieć na pewno, nie widząc kodu. :) Zgaduję, że ma to coś wspólnego z 'ReportPath' (ale nie jestem pewien). Polecam opublikować nowe pytanie dotyczące tego konkretnego problemu. – MAV

+0

OK, zrobi. Jeszcze raz dziękuję – bbcompent1

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

Ten pracował dla mnie:

combobox.valuemember="id" 
    combobox.displaymember="name" 
    combobox.datasource=dt 
Powiązane problemy