2013-04-13 9 views
9

Ich habe Probleme, den ValueMember-Wert zu erhalten, den ich festgelegt habe. Ich versuche, eine Combobox zu verwenden, um einen Windows-Formularbericht auszuwählen. Ich kann den Namen aber nicht RptValue bekommen. Hier ist mein Code:Wie bekomme ich ValueMember Wert von 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(); 
     } 
    } 

Antwort

15

Sie sollten die DataSource Eigenschaft verwenden. Versuchen Sie folgendes:

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

Und dann den ausgewählten Wert zugreifen:

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

Ok, jetzt auf die ich einen anderen Fehler bekommen sich melden. Darin heißt es "Bei der lokalen Berichtsverarbeitung ist ein Fehler aufgetreten. Die Berichtsdefinition für" Berichtsname "wurde nicht angegeben. Der Objektverweis wurde nicht auf eine Instanz eines Objekts festgelegt." Irgendwelche Ideen? – bbcompent1

+0

@ bbcompent1 Kann nichts sicher sagen ohne Code zu sehen. :) Ich nehme an, es hat etwas mit 'ReportPath' zu tun (aber ich bin mir nicht sicher). Ich werde empfehlen, eine neue Frage zu diesem speziellen Problem zu stellen. – MAV

+0

Ok, werde ich tun. Nochmals vielen Dank, – bbcompent1

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

Das ist für mich gearbeitet:

combobox.valuemember="id" 
    combobox.displaymember="name" 
    combobox.datasource=dt 
Verwandte Themen