UltraGrid 中嵌入类似CheckBoxList功能

本文转自:http://blog.csdn.net/lee576/article/details/6592974

先说一下客户的需求,有点古怪

就是在某一列中,放一个类似的CheckBoxList的控件那样,可以多选的东东,选择几项保存的时候就插几条记录进数据库,其余的字段内容一样。


但是图上这个有CheckBoxList那行是Add上去的(Grid.DisplayLayout.Bands[0].AddNew();在点Save的时候是Insert 操作

原有的行则是从数据库出来的,在点击Save的时候则是Update操作,如下图,要求是下拉框了,因为Update的时候,只能保存成另外一个值,不可以让用户去多选


本来这样的形式在一样情况下可以正常出效果的(同一列不同单元格放不同的Editor),在Grid的InitializeRow事件,和在UltraGridRow row = Grid.DisplayLayout.Bands[0].AddNew();中对它们的Cell的EditorComponent进行设置是没有什么问题的,但是奇怪的是在当前这种情况下确出了问题,把上面保存操作的行上dropdownlist 绑定好,下面插入的新行绑定显示的checkboxlist多选的下拉框确出不来了!好像是互相排斥一样。在试了很多方法,又google了很多网页,包括官方社区以后。自己试出来要的图上的效果了。

说一下要点

1. 要绑定的那个CheckBoxList东东,不要动态创建,比如UltraComboEditor comboEditor = new UltraComboEditor ();

    在设计界面拖一下UltraComboEditor 放在界面上Visable设成false

2.在绑定完Grid之前,直接设置列的编辑控件为UltraComboEditor 

   Grid.DisplayLayout.Bands[0].Columns["QualifierID"].EditorComponent = comboEditor;

3.在InitializeRow事件中再分别绑定

  1. private void SetEditControlToRow(UltraGridRow row)  
  2.         {  
  3.             foreach (UltraGridCell gridCell in row.Cells)  
  4.             {  
  5.                 switch (gridCell.Column.Key)  
  6.                 {  
  7.                     case "QualifierID":  
  8.                         if (!string.IsNullOrEmpty(gridCell.Row.Cells["AllocationID"].Value + ""))  
  9.                         {  
  10.                             UltraCombo dropDown5 = new UltraCombo();  
  11.                             dropDown5.DataSource = _presenter.GetQualifierType();  
  12.                             dropDown5.DisplayMember = "QualifierType";  
  13.                             dropDown5.ValueMember = "QualifierID";  
  14.                             dropDown5.DisplayLayout.Bands[0].HeaderVisible = false;  
  15.                             dropDown5.DisplayLayout.Bands[0].Columns[1].Hidden = true;  
  16.                             gridCell.EditorComponent = dropDown5;  
  17.                             dropDown5.RowSelected += new RowSelectedEventHandler(dropDown5_RowSelected);  
  18.                             SetValueOnCell(gridCell, dropDown5);  
  19.                             Grid.DisplayLayout.Bands[0].Columns["SubInventoryId"].Hidden =  
  20.                                 gridCell.Row.Cells["QualifierID"].Text.ToUpper() != "SUBINVENTORY";  
  21.                         }  
  22.                         else  
  23.                         {  
  24.                             comboEditor.DataSource = _presenter.GetQualifierType();  
  25.                             comboEditor.DisplayMember = "QualifierType";  
  26.                             comboEditor.ValueMember = "QualifierID";  
  27.                             comboEditor.CheckedListSettings.CheckBoxAlignment = ContentAlignment.MiddleRight;  
  28.                             comboEditor.CheckedListSettings.CheckBoxStyle = CheckStyle.CheckBox;  
  29.                             comboEditor.CheckedListSettings.EditorValueSource = EditorWithComboValueSource.CheckedItems;  
  30.                             comboEditor.CheckedListSettings.ListSeparator = ",";  
  31.                             comboEditor.CheckedListSettings.ItemCheckArea = ItemCheckArea.Item;  
  32.                             gridCell.EditorComponent = comboEditor;  
  33.                         }  
  34.                         break;  
  35.                 }  
  36.             }  
  37.         }  
上面代码以行中有无主键ID为判断,有就是Update放上普通控件,无就是Insert设置成CheckBox下拉框。combEditor就是我拖到界面上的那个UltraComboEditor.

重点解释一下下面这几行代码

  1.                             comboEditor.CheckedListSettings.CheckBoxAlignment = ContentAlignment.MiddleRight;  
  2.                             comboEditor.CheckedListSettings.CheckBoxStyle = CheckStyle.CheckBox;  
  3.                             comboEditor.CheckedListSettings.EditorValueSource = EditorWithComboValueSource.CheckedItems;  
  4.                             comboEditor.CheckedListSettings.ListSeparator = ",";  
  5.                             comboEditor.CheckedListSettings.ItemCheckArea = ItemCheckArea.Item;comboEditor.CheckedListSettings.CheckBoxAlignment = ContentAlignment.MiddleRight;checkbox对齐方式comboEditor.CheckedListSettings.CheckBoxStyle = CheckStyle.CheckBox;  
  6. 显示为CheckBox,也可以设置成三态TriState,None等,这里需要多选,  
  7. 所以就CheckBoxcomboEditor.CheckedListSettings.EditorValueSource = EditorWithComboValueSource.CheckedItems;  
  8. 设置该Editor为选中的Item值,也可以设置为SelectedItem,这样只点击那一项,不用打勾也行  
  9. comboEditor.CheckedListSettings.ItemCheckArea = ItemCheckArea.Item;设置点击点为选中的区域,Item是点击那一项,Checkbox为为CheckBox打勾才算选中 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值