相关文章推荐
强悍的台灯  ·  JavaScript解析 XML DOM ...·  1 年前    · 
private void ComboxBox1_SelectedIndexChanged( object sender, EventArgs e)
if (flag)
{
// Do something
}
}
另外还有一种办法,就是在绑定前,将SelectedIndexChanged的委托去掉,等绑定完成后,再添加事件委托。 void BindComboBox()
{
// 去除委托
ComboBox1.SelectedIndexChanged -= new EventHandler(ComboBox1_SelectedIndexChanged);
ComboBox1.DataSource
= null ;
ComboBox1.ValueMember
= " ValueColumn " ;
ComboBox1.DataSource
= DataTable1;
// 添加委托
ComboBox1.SelectedIndexChanged += new EventHandler(ComboBox1_SelectedIndexChanged);
ComboBox1.DisplayMember
= " DisplayColumn " ;
}
两种方法都可以,但是之间的优劣暂时没去比较。感觉好像处理一下委托会好点。因为这种办法真的减少了事件的激发次数。
不知道还有没有其他解决方案呢?

另,贴上一段完整的代码例子。这个例子是访问SqlServer数据库的AdventureWorks,通过ProductCategory和ProductSubCategory两级目录分类去查看Product表的内容。分别使用两个ComboBox和DataGridView完成数据绑定。效果就是选择之后会联动改变相关内容。

public partial class frmProduct : Form
{
DataSet DS
= new DataSet();
String ConnectionString
= " integrated security=true; database=AdventureWorks; server=localhost; " ;
public frmProduct()
{
InitializeComponent();
}

private void frmProduct_Load( object sender, EventArgs e)
{
SqlDataAdapter da
= new SqlDataAdapter( " select ProductCategoryID,[Name] from Production.ProductCategory " , ConnectionString)
;
cbbCategories.SelectedIndexChanged
-= new EventHandler(cbbCategories_SelectedIndexChanged);
da.Fill(DS,
" ProductCategory " );
cbbCategories.DataSource
= null ;
cbbCategories.ValueMember
= " ProductCategoryID " ;
cbbCategories.DataSource
= DS.Tables[ " ProductCategory " ];
cbbCategories.SelectedIndexChanged
+= new EventHandler(cbbCategories_SelectedIndexChanged);
cbbCategories.DisplayMember
= " Name " ; // 这句放在事件委托之后才会有联动效果,下同
}

private void cbbCategories_SelectedIndexChanged( object sender, EventArgs e)
{
SqlDataAdapter da
= new SqlDataAdapter( " select ProductSubCategoryID,[Name] from Production.ProductSubCategory where ProductCategoryID= " + cbbCategories.SelectedValue.ToString(), ConnectionString)
;
if (DS.Tables[ " ProductSubCategory " ] != null )
{
DS.Tables[
" ProductSubCategory " ].Clear();
}
da.Fill(DS,
" ProductSubCategory " );
cbbSubCategories.SelectedIndexChanged
-= new EventHandler(cbbSubCategories_SelectedIndexChanged);
cbbSubCategories.DataSource
= null ;
cbbSubCategories.ValueMember
= " ProductSubCategoryID " ;
cbbSubCategories.DataSource
= DS.Tables[ " ProductSubCategory " ];
cbbSubCategories.SelectedIndexChanged
+= new EventHandler(cbbSubCategories_SelectedIndexChanged);
cbbSubCategories.DisplayMember
= " Name " ;
}

private void cbbSubCategories_SelectedIndexChanged( object sender, EventArgs e)
{
if (cbbSubCategories.SelectedIndex == - 1 )
return ;
SqlDataAdapter da
= new SqlDataAdapter( " select * from Production.Product where ProductSubCategoryID= " + cbbSubCategories.SelectedValue.ToString(), ConnectionString);
dgvProduct.DataSource
= null ;
if (DS.Tables[ " Product " ] != null )
DS.Tables[
" Product " ].Clear();
da.Fill(DS,
" Product " );
dgvProduct.DataSource
= DS.Tables[ " Product " ];
}
}
ComboBox最经常使用的事件就是SelectedIndexChanged。但在将ComboBox绑定到某个数据源的过程中,会触发SelectedIndexChanged事件,而这个时候用户并没有选择内容,其SelectedValue也不是对应字段的值。那么时写在SelectedIndexChanged中的处理代码就会因为SelectedValue的内容不正确引发异常。一般网上找到的方法 combo.SelectedValue就可以取得选中项的值了。 DisplayMember会显示在你的下拉框中,ValueMember的值和下拉框显示的值一一对应,并不在下拉框显示的。 所对应的值就是一条记录里面 有标识列ID(唯一) 有显示的列(如名称,可重复)...
今天偶尔复习下WinForm开发,在用到 ComboBox 下拉框的 候,想用 SelectedIndexChanged 事件 根据选中内容动态展示不同的 数据 ,需求很简单,但是竟然出错了,后来发现其实就是 SelectedIndexChanged 事件 执行 间问题导致的,那如何解决呢,请看下面的分析。 一、DataBind()方法就是给下拉框 的方法(这里为了让下拉框默认不选中,设置了SelectedIndex = -1)这个位置就是出问题的地方 // 数据 private voi
你要明白,任何问题都不是孤立存在的,一定有人曾经遇到过,并且已经有更好的解决办法了,只是我还不知道。我不应该在黑暗中独自前行,去重新发明轮子,也许我的顿悟,只是别人的基本功!我应该要站在巨人的肩膀上,学习更成熟的经验和方法,然后再来解决这个问题 11-05
### 回答1: Winform ComboBox 数据 是指将 数据 中的 数据 ComboBox 控件进行关联,使得 ComboBox 控件可以显示 数据 中的 数据 ,并且可以根据用户的选择进行 数据 的操作。 数据 可以通过代码实现,也可以通过可视化设计工具实现。在 数据 过程中,需要注意 数据 的类型、 数据 的方式、 数据 的更新等问题。同 ,还需要考虑 数据 的安全性和 数据 的完整性,以保证 数据 的正确性和可靠性。 ### 回答2: WinForm Combobox 数据 指的是将 数据 Combobox 控件进行 ,从而实现 数据 的显示、选择和操作等功能。 数据 可以是 数据 库、XML、数组、集合等, 数据 的方式也有多种,包括程序指 数据 控件和 数据 控件等。 在WinForm Combobox 数据 中,可以通过以下方法来实现 数据 : 1. 手动添加 数据 :通过程序代码直接添加 Combobox 的Items属性,比较适用于 数据 量较小的情况。 2. 在设计器中添加 数据 :在Visual Studio的设计器中,可以通过在 Combobox 的常规属性中设置Items属性,手动添加 数据 。 3. 数据 :通过 数据 控件或 数据 控件来 Combobox 数据 ,更适用于 数据 量较大或需要频繁更新的情况。比如,可以使用BindingSource控件对 数据 进行 ,使用BindingNavigator控件对 数据 进行操作和导航。 在使用 数据 进行WinForm Combobox 数据 ,需要注意以下几点: 1. 数据 必须是支持IList接口的对象,比如List<>、DataTable等。 2. 数据 Combobox 必须 相同的 数据 类型,比如字符串、整数等。 3. 在 数据 之前,需要创建 Combobox 的DisplayMember和ValueMember属性,分别表示显示的字段和值的字段。 4. 在 数据 之后,可以使用SelectedItem或SelectedValue属性来获取用户选择的项。 总的来说,WinForm Combobox 数据 是一种非常实用的 数据 方式,可以方便地实现 数据 的显示和操作,提高了WinForm应用程序的开发效率。在实际应用中,需要根据具体情况选择合适的 数据 数据 方式,以达到更好的效果。 ### 回答3: WinForm中的 ComboBox 控件是在用户界面中广泛使用的一个控件,可以用来展示可选项列表、输入提示等。 ComboBox 数据 可以通过 数据 来实现,这样可以方便的将 数据 与控件关联起来,实现 数据 的自动更新和整合。 在WinForm中, ComboBox 数据 可以是DataSet、DataTable、List、Array等类型的 数据 ,也可以是通过SQL查询获取的 数据 。实现 数据 的方式有多种,其中常见的有DataSource、DisplayMember和ValueMember属性。 DataSource属性 DataSource属性可以用来指 ComboBox 数据 。将DataSource设置为一个集合、数组或者 数据 表等类型的 数据 之后, ComboBox 就可以根据 数据 自动生成下拉列表的选项。例如,我们可以将 ComboBox 的DataSource属性指 为一个DataTable对象,然后通过 ComboBox 控件自动 DataTable中的 数据 。 DisplayMember属性 DisplayMember属性用来指 ComboBox 数据 中的文本字段,用来表示下拉列表中每个选项的文本信息。例如,我们可以将DisplayMember属性指 为DataTable中的一列名为“Name”的字段,这样 ComboBox 就会在下拉列表中显示名称。 ValueMember属性 ValueMember属性用于指 ComboBox 数据 中的数值字段,用于表示 ComboBox 控件所选择的选项的数值信息。例如,我们可以将ValueMember属性指 为DataTable中的一列名为“ID”的字段,这样 ComboBox 就可以保存ID信息并将其与相应的选项进行匹配。 WinForm ComboBox 控件的 数据 需要通过三个属性DataSource、DisplayMember和ValueMember来实现。DataSource用于指 ComboBox 数据 ,DisplayMember用于指 下拉列表的文本信息,ValueMember用于指 数值信息。这样就可以实现 ComboBox 的自动更新和整合。实际操作中,要根据情况选择合适的 数据 类型和 方式。