如何从ComboBox C#Winforms获得ValueMember值?

我在尝试获取我设置的ValueMember值时遇到了一些麻烦。 我正在尝试使用combobox来选择Windows窗体报告。 我可以得到名字而不是RptValue。 这是我的代码:

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

您应该使用DataSource属性。 试试这个:

 BindingList _comboItems = new BindingList(); _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"; 

然后访问所选值:

 strReport = "ReportViewer." + comboBox1.SelectedValue; 
  String s; s=comboBox1.SelectedValue.tostring() 

这对我有用:

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