关键词:
【中文标题】C# 数据绑定 ComboBox 在其他控件中更改数据【英文标题】:C# databound ComboBox changing data in other controls 【发布时间】:2014-12-20 13:15:37 【问题描述】:我有一个非常复杂的问题,所以我会尽力解释:
我有一个 C# Windows Forms (.NET 4) 程序。我的 Windows 窗体包含一个大的空白面板。 在这个程序中,我有一个带有设计器的 Windows 窗体 UserControl 类。用户控件是一个带有两个 ComboBox 和一个 TextBox 的框(称为菜单选项)。
用户控件上的每个 ComboBox 都使用以下方法绑定到不同的 DataSource:
comboBoxSelection1.DataSource = SelectionList1;
comboBoxSelection2.DataSource = SelectionList2;
当用户使用组合框选择项目时,文本框会显示他们的选择。 例如。选择 1:牛排,选择 2:薯条。
这个程序的重点是允许用户创建多个用户控件(菜单选项),每个控件都有不同的选择,从而产生一个选择列表(变成一个单一的顺序)。
到目前为止和我在一起? 在我开始为 ComboBoxes 使用 DataSource 之前,这工作得非常好,如下所示:
object[] comboBoxList1 = new object[SelectionList1.Count];
int i = 0;
foreach (Selection s in SelectionList1)
string description = s.Description;
comboBoxList1[i] = description;
i++;
comboBoxSelection1.Items.AddRange(comboBoxList1);
但是,我需要使用 DataSource 来按 id 区分项目(一些显示的名称是相同的 - 我无法更改)。
我现在正在使用以下内容:
comboBoxSelection1.DataSource = SelectionList1;
comboBoxSelection1.ValueMember = "Code";
comboBoxSelection1.DisplayMember = "Name";
问题是,每当我在我的一个用户控件上更改 comboBoxSelection1 时,面板上每个用户控件上的 comboBoxSelection1 值都会更改为我当前的选择。如果我更改任何 comboBoxSelection2 中的值,comboBoxSelection2 也会发生同样的情况,所有 comboBoxSelection2 框都会更改为相同的值。
这是对多个控件使用一个数据源的错误吗? 已经在这里看到了:Data Bound ComboBox: List item changed when I select another
在这种情况下,问题已通过使用 DataBindings 而不是 DataSource 解决。 如此处所示:ComboBox SelectedItem vs SelectedValue。
但是当我尝试这段代码时,我的 ComboBox 项目列表仍然是空的:
BindingSource comboBoxSelection1Binding = new BindingSource();
comboBoxSelection1.DataSource = SelectionList1;
comboBoxRuleCustomerGroup.DataBindings.Add("SelectedValue", comboBoxSelection1, "Name", true, DataSourceUpdateMode.OnPropertyChanged);
有什么想法吗? 抱歉,问题过于复杂,我一直不得不编写过于复杂的程序!
【问题讨论】:
【参考方案1】:如果你想完全避免使用数据源
您可以将项目添加为类而不是 fx
ComboBox1.Items.Add(new MyClass("Name", 1))
然后有课
public class MyClass
private readonly string _Navn;
public MyClass(string name, Int id)
Id = id;
Name = name;
public int Id get;
public override string ToString()
return Name;
然后,当您需要访问权限时,您会这样做。
(ComboBox1.SelectedItem as MyClass).Id
【讨论】:
【参考方案2】:在周末深入思考后进行了更详细的搜索。我之前搜索的问题是不知道到底发生了什么。我现在意识到,当尝试将多个组合框绑定到同一个数据集时,这是一个问题。
终于找到了: Multiple ComboBox controls from the same Dataset
答案是添加一行:
comboBoxSelection1.BindingContext = new BindingContext();
所有功劳归功于 Blind Fury/John Saunders 和 Bytes.com。
【讨论】:
【参考方案3】:您可以尝试将以 object[] 开头的代码 sn-p 重构为它自己的方法,传入 ComboBox 控件和 SelectionList。
private void PopulateList(ComboBox boxToPopulate, List<String> selectionList)
object[] comboBoxList1 = new object[selectionList.Count];
int i = 0;
foreach (Selection s in selectionList)
string description = s.Description;
comboBoxList1[i] = description;
i++;
boxToPopulate.Items.AddRange(comboBoxList1);
使用此方法,您可以拥有无限数量的 ComboBox 并唯一地填充它们。
【讨论】:
感谢您的想法,但是我不得不切换到数据绑定而不是单独将描述添加到组合框中的原因是某些描述相同但具有不同的 ID。不幸的是,这是一个完全不受我控制的列表,并且这些重复的名称是不可避免的(我仅使用食物菜单作为示例,我的工作数据集要复杂得多)组合框中选择的描述需要绑定到所选项目的唯一 ID。不幸的是,这就是我真正需要使用数据绑定的原因。wpf中combobox控件的selecteditem和selectedvalue的mvvm绑定(代码片段)
...ctedItem的其他属性,包括Age,Address,和Category。其中Category用ComboBox表示。在下拉框选中其他category,可以更改User的属性值。 如果Category是string类型,即User类的 查看详情
combobox绑定dictionary做为数据源(代码片段)
原文:ComboBox绑定Dictionary做为数据源ComboBox的DataSource的值可设置为:实现IList接口的对象,如DataSet或Array。默认为空引用(在VisualBasic中为Nothing)。但是在实际的项目中可能需要绑定Dictionary作为数据源。此时,将Dictionary<>放... 查看详情
wpf的combobox怎么绑定数据?
Wpf的comboBox怎么绑定数据?数据是从数据库读取出来的,显示的是类别的名称,点击提交时提交的是类别的ID,这要怎么做?WPF中提供了数据绑定的功能,操作起来很方便,集合类的控件几乎都可以用数据源来进行数据的绑定,... 查看详情
请教c#winform中combox控件?
...是空,在选择其他选项后还可以选择空选项,谢谢!另:comboBox1.SelectedIndex=-1;这个是可以,但是选择完后就不能再选空了如果用comboBox1.DataSource这种方式绑定,只能在数据库添加一个空项,要不然可以用comboBox1.Items.Add();这样循环... 查看详情
c#中有种下拉框(combobox),还有中控件,我是在网上下的下拉框(comboboxedit),我没找到他的下拉属性
没看到DropDownstyle属性。请求各位帮个忙,谁用过这种(comboboxEdit)控件的,麻烦告诉我一下,在线等。。。。。。。。。。。。ComboBoxEdit也是DevExpresswinform控件中经常使用的一个,我们在使用的过程中可能有时需要对ComboBoxEdit控... 查看详情
winform开发中如何将数据库字段绑定到combobox控件
...的问题记录下来。Winform开发中如何将数据库字段绑定到ComboBox控件1.问题引入在开发中用到了ComboBox控件,也就是实现下拉选择功能的控件。但是选项的数据并不是固定的,而是要根据数据库中的某一列进行动态的调整。 2.解... 查看详情
c#的winform程序中,radiobutton的用法
我在窗体上放了三个radiobutton。还有一个combobox。我想在分别选择三个不同的radiobutton时,让combobox绑定不同的数据字段。显示不同的内容。但在运行的时候,点第一个radiobutton时,程序正常运行。当点第二个的radiobutton的时候,就... 查看详情
winform中combobox控件之数据绑定
http://www.cnblogs.com/peterzb/archive/2009/05/30/1491923.html 下面介绍三种对comboBox绑定的方式,分别是泛型中IList和Dictionary,还有数据集DataTable 一、IList & 查看详情
winform控件combobox数据绑定
ComboBox下拉菜单控件,在数据库内的ComboBox应用的表进行修改时,如果是用的普通方法,显示数据一个方法,添加数据一个方法这样会导致程序后期维护难度增加,在这里使用数据绑定来让ComboBox数据实现根据数据库对应表数据显示,降低... 查看详情
c#中combobox动态绑定赋值
http://www.crifan.com/csharp_combobox_data_dynamic_binding/C#中,已有一个List,想要动态的,绑定到ComboBox中。【解决过程】1.参考:c#winformcomboBox动态绑定数据去试试代码:cmbSubCategory.DataSource=generalCategoryList;cmbSubCategory.Di 查看详情
c#中怎么把combobox控件的一部分选项改为不可选?
if(comboBox1.SelectedIndex==2)//当选择星期二的时候comboBox1.SelectedIndex=0;//选中第一项这只是一种,不满足要求的话可以去找一下属性,应该有属性可以设置的。追问怎么实现点击不可选的选项后下拉列表在关闭的时候就恢复默认的选项... 查看详情
下拉菜单中怎么默认选中第一个呢,代码?(c#)
我这用得comboBox控件,控件名为comboBox1如果是静态的直接在select=true即可如果是动态绑定即在绑定后加上DropDnowList1.SelectedIdex=0即可原理是一样的只要改一下控件名就可以了参考技术ADropDnowList1.SelectedIdex=0 参考技术B或者直接把comboB... 查看详情
winform控件大全,要详细的.
...,文本框,长度,errorprovider组件,方便,快捷C#WinForm开发系列–ComboBoxwinform中的AutoComplete自定义控件c#,winform,combobox联动c#+winform+combobox+动态生成控件,根据选择的内容WinForm下ComboBox添加项与设定预选项在.Net中将Enum绑定到ComboBox控件(思想... 查看详情
关于c#的一个控件combobox的筛选问题
我已经在Combobox中添加了数据:“aaa,bbb,ccc,abc,adc,caa”现在我想实现它的筛选,比如:我在Combobox中输入“a”,凡是以“a”开头的那几个数据“aaa,abc,adc”,就会自动弹出,代码该怎么写?string[]arrs="aabb","aaabb","aabbc";comboBox1.AutoCompl... 查看详情
wpf,mvvm,在combobox中嵌套了checkbox控件,数据绑定完成后,无法实现双向绑定
...m层的数据可以在页面正确显示,是单向的。xaml代码:<ComboBoxHeight="23"HorizontalAlignment="Left"Grid.Column="0"Grid.Row="0"Margin="15,4,6,4"x:Name="KeyComboBox"VerticalAlignment="Top"Width="120"Te... 查看详情
使用 LINQ XML 绑定 ComboBox
】使用LINQXML绑定ComboBox【英文标题】:BindingComboBoxwithLINQXML【发布时间】:2011-01-2112:55:44【问题描述】:对不起,我的英语很差,那不是我的母语。我是WPF和LINQ的初学者(从3天开始),并且是C#的临时用户。昨天,我整天都在努... 查看详情
c#中关于combobox控件问题
C#中这个控件在使用时候能不能这样的用法?比如有个COMBOBOX已经有列表值在里面了然后我要用程序在一个textbox里面显示combobox里面第3项的值,或者输出当前正选中的项的值(不想直接用combobox.text)记得好像以前VB能直接items(n)... 查看详情
c#如何设置combobox下拉框的内容
combobox名字为combobox_stu_delete,下拉框显示的是从sql数据库表stu中读取到的name的信息,点击可以选择,求如何实现代码1、首先,我们新键一个Winform窗体应用程序,然后在界面上,放置一个下拉框。2、在CS类里面编辑代码,为下拉... 查看详情