65.9K
CodeProject 正在变化。 阅读更多。
Home

DataGrid 的条件组合框列

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (4投票s)

2007年4月9日

CPOL

1分钟阅读

viewsIcon

33003

downloadIcon

1546

这是一个类,它允许您根据某些条件在DataGrid上显示下拉框。

Screenshot - ConditionalCombobox.jpg

引言

有时您需要提供一个用户界面,该界面能够以自由形式(例如名称)和受限形式(下拉框,例如性别)接受输入。此控件以一种简单的方式解决了这个问题。

背景

我遇到过这样的需求。我在互联网上搜索,所有文章或控件都在讨论将整列变成下拉框。所以我决定修改一个这样的代码来满足我的需求。

Using the Code

首先,您需要在DataGrid的表格样式中添加类型为DatagridConditionalComboboxColumnGridColumnStyleDatagridConditionalComboboxColumn的构造函数接受一个ComboValueChanged委托作为输入。每当用户更改下拉框的SelectedIndex时,都会调用此委托。

然后,您需要侦听由DatagridConditionalComboboxColumn在用户进入单元格进行编辑时引发的StatedEditing事件。在这里,您可以检查条件,并根据条件将ShowCombobox属性设置为truefalse。如果将其设置为true,则可以向下拉框添加项目。

完成所有这些操作后...就完成了。请查看附带的示例源代码。

//
// A sample of adding DatagridConditionalComboboxColumn to the datagrid 
// table style
DataGridTableStyle tableStyle = new DataGridTableStyle();

DataGridTextBoxColumn nameColumn = new DataGridTextBoxColumn();
nameColumn.MappingName = "Name";
nameColumn.HeaderText = "Name";
nameColumn.ReadOnly = true;

tableStyle.GridColumnStyles.Add(nameColumn);

ComboValueChanged comboValueChangedDelegate = 
          new ComboValueChanged(comboValueChanged);

DatagridConditionalComboboxColumn valueColumn = 
      new DatagridConditionalComboboxColumn(comboValueChangedDelegate);
valueColumn.StartedEditing +=new EventHandler(valueColumn_StartedEditing);
valueColumn.MappingName = "Value";
valueColumn.HeaderText = "Value";
tableStyle.GridColumnStyles.Add(valueColumn);

this.dataGrid1.DataSource = populateDatatable();

this.dataGrid1.TableStyles.Clear();
this.dataGrid1.TableStyles.Add(tableStyle);

关注点

无。

© . All rights reserved.