I'm having some trouble trying to get the ValueMember value I've set. I'm trying to use a combobox to select a windows forms report. I can get the Name but not RptValue. Here's my code:
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();
}
}
When you set the SelectedItem property to an object, the ComboBox attempts to make that object the currently selected one in the list. If the object is found in the list, it is displayed in the edit portion of the ComboBox and the SelectedIndex property is set to the corresponding index.
27 Sep 20217 minutes to read. The data source can be bound by using the DataSource property. The following properties controls the data binding: DisplayMember : To display the underlying datasource for Windows Forms ComboBox. ValueMember : To use as the actual value for the items.
You should use the DataSource
property. Try this:
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";
And then access the selected value:
strReport = "ReportViewer." + comboBox1.SelectedValue;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With