如何启用多重选择 默认情况下,ComboBoxEdit、LookUpEdit和ListBoxEdit编辑器使用单个选择。 要在这些编辑器中启用多个选择,您需要更改其操作模式 - 在其StyleSettings属性中使用相应的设置对象: [XML] 纯文本查看 复制代码 <dxe:ComboBoxEdit ...>
<dxe:ComboBoxEdit.StyleSettings>
<dxe:CheckedComboBoxStyleSettings/>
</dxe:ComboBoxEdit.StyleSettings>
</dxe:ComboBoxEdit> 我们在以下帮助主题中描述了可用的设置对象: 注意:在In-Place模式下定义这些编辑器时,将使用ComboBoxEditSettings、LookUpEditSettings和ListBoxEditSettings对象,这些对象也具有StyleSettings属性: [XML] 纯文本查看 复制代码 <dxg:GridColumn ...>
<dxg:GridColumn.EditSettings>
<dxe:ComboBoxEditSettings ...>
<dxe:ComboBoxEditSettings.StyleSettings>
<dxe:CheckedComboBoxStyleSettings/>
</dxe:ComboBoxEditSettings.StyleSettings>
</dxe:ComboBoxEditSettings>
</dxg:GridColumn.EditSettings>
</dxg:GridColumn> 绑定数据启用多个选择的编辑器在其EditValue属性中使用List Object数据类型的值,在编辑器中选择项目时,它将使用选定的值创建List Object数据类型的新实例,哪些值将存储在此列表中取决于您是否定义ValueMember属性。 假设您具有以下Item类,Items集合属性(在编辑器的ItemsSource属性中使用)和SelectedItems属性(在EditValue属性中使用): [C#] 纯文本查看 复制代码 public class Item
{
public int Id { get; set; }
public string Name { get; set; }
}
...
public ObservableCollection<Item> Items { get; set; }
= new ObservableCollection<Item>(Enumerable.Range(0, 10)
.Select(c => new Item
{
Id = c,
Name = "Item #" + c
}));
public List<Object> SelectedValues { get; set; } 如果您不定义ValueMember [XML] 纯文本查看 复制代码 <dxe:ListBoxEdit ItemsSource="{Binding Items}"
EditValue="{Binding SelectedValues}"
DisplayMember="Name">
<dxe:ListBoxEdit.StyleSettings>
<dxe:CheckedListBoxEditStyleSettings/>
</dxe:ListBoxEdit.StyleSettings>
</dxe:ListBoxEdit> EditValue和SelectedValues属性将包含List Object以及从Items中选择的Item对象。
如果您定义ValueMember [XML] 纯文本查看 复制代码 <dxe:ListBoxEdit ItemsSource="{Binding Items}"
EditValue="{Binding SelectedValues}"
ValueMember="Id"
DisplayMember="Name">
<dxe:ListBoxEdit.StyleSettings>
<dxe:CheckedListBoxEditStyleSettings/>
</dxe:ListBoxEdit.StyleSettings>
</dxe:ListBoxEdit> EditValue和SelectedValues属性将包含List Object以及从ItemsSource中选择的Item对象的Id属性值:
注意: - 如果在EditValue的List Object实例中添加值或从中删除值,则编辑器将不会选择/取消选择相应的项目。 而是使用所需的一组值创建一个新的List Object实例,并在EditValue中使用它;
- 当您未在ItemSource中定义ValueMember并使用复杂对象*时,EditValue的List Object中的值应来自编辑器的ItemsSource。 在上面的示例中,如果要在代码中设置SelectedValues,则需要使用Items集合中的Item实例将其设置为List Object:SelectedValues = new List<object>() { Items[0], Items[2], Items[4] };否则,编辑器将无法确定应从源中选择哪些对象。
在GridControl单元格中的使用要为某个GridColumn指定in-place编辑器,请使用我们在此帮助主题中描述的方法:In-place Editors,编辑器的EditValue与您在GridColumn中定义的数据项属性相关联:将列绑定到数据源字段。 在编辑器中启用多选时,它在其EditValue中使用List Object,但是FieldName不支持编辑集合属性, 这就是为什么您将无法在下面的GridColumn单元格中编辑SelectedValues属性的原因: [XML] 纯文本查看 复制代码 public class GridDataItem {
...
public List<Object> SelectedValues { get; set; }
...
}
<dxg:GridColumn FieldName="SelectedValues" ...>
<dxg:GridColumn.EditSettings>
<dxe:ComboBoxEditSettings ...>
<dxe:ComboBoxEditSettings.StyleSettings>
<dxe:CheckedComboBoxStyleSettings/>
</dxe:ComboBoxEditSettings.StyleSettings>
</dxe:ComboBoxEditSettings>
</dxg:GridColumn.EditSettings>
</dxg:GridColumn> 在这种情况下启用编辑使用以下方法: 1. 在GridColumn中使用GridControl的Binding属性。 您还需要在绑定表达式中将Mode设置为TwoWay,以便在使用Binding属性时启用编辑: [XML] 纯文本查看 复制代码 <dxg:GridColumn Binding="{Binding Path=SelectedValues, Mode=TwoWay}" ...>
<dxg:GridColumn.EditSettings>
<dxe:ComboBoxEditSettings ...>
<dxe:ComboBoxEditSettings.StyleSettings>
<dxe:CheckedComboBoxStyleSettings/>
</dxe:ComboBoxEditSettings.StyleSettings>
</dxe:ComboBoxEditSettings>
</dxg:GridColumn.EditSettings>
</dxg:GridColumn> 2. 将基础数据项的属性类型更改为Object: [XML] 纯文本查看 复制代码 public class GridDataItem {
...
public Object SelectedValues { get; set; }
...
}
<dxg:GridColumn FieldName="SelectedValues" ...>
<dxg:GridColumn.EditSettings>
<dxe:ComboBoxEditSettings ...>
<dxe:ComboBoxEditSettings.StyleSettings>
<dxe:CheckedComboBoxStyleSettings/>
</dxe:ComboBoxEditSettings.StyleSettings>
</dxe:ComboBoxEditSettings>
</dxg:GridColumn.EditSettings>
</dxg:GridColumn> DevExpress技术交流群2:775869749 欢迎一起进群讨论
|