DEV RepositoryItem控件绑定 CheckedComboBoxEdit

尝试在Treelist中绑定RepositoryItemCheckedComboBoxEdit控件,结果会绑定数据,却不知道如何返回数据了,反复了几天。

因为本需求比较奇葩(下拉框值都不一样,显示值与真实值不一样),最后使用动态绑定控件的办法解决的。

也可以不动态绑定控件,但是如果那样的话,CheckedComboBoxEdit控件的下拉框的所有选项都是一样的

而这里要求每一行的那个单元格下拉框值都不是一样的。

 

一、如何在Treelist \ Gridcontrol中绑定动态编辑控件

RepositoryItemCheckedComboBoxEdit checkedCBE;
private void tlstSelLayer_CustomNodeCellEdit(object sender, DevExpress.XtraTreeList.GetCustomNodeCellEditEventArgs e)
{
    if (e.Node == null) return;
    string fieldName = "";
    string aliasName = "";
    IFeatureClass featureClass;
    TreeListNode tln = e.Node;

    if (e.Column.Name == NodeNameDef.CONST_Alias && e.Node.Id >= 0)
    {
        checkedCBE = new RepositoryItemCheckedComboBoxEdit();
        //checkedCBE.EditValueChanged += new System.EventHandler(checkedCBE_EditValueChanged);
        //checkedCBE.EditValueChanging += new ChangingEventHandler(checkedCBE_EditValueChanging);        
        try
        {
            int length = 5;
            for (int i = 0; i < length; i++)
            {
               checkedCBE.Items.Add(i);
               //checkedCBE.Items.Add("真实值", "要显示的值");
            }
            e.RepositoryItem = checkedCBE;//绑定控件
        }
        catch (Exception)
        {
        }
    }
}

 

二、如何获得编辑后的值

一般情况下,在Node中自动的会把数据同步过去。

但是,这个我使用的是中英文,显示的是中文,想得到对应的英文,绑定数据的时候也是这么做的。

//checkedCBE.Items.Add("真实值", "要显示的值");

“要显示的值”会自动同步到treelist/gridcontrol中,“真实值”怎么获得就困扰我了。
花费了几天功夫,尝试了N中方法,终于知道了,是自己无知。
CheckedComboBoxEdit的真实值、显示值会自动同步到node的真实值和显示值中,不需要实现如何获得真实值。
 //treelist的node本身就具有显示值、真实值的区别
pNode.GetValue(0)//这是获得真实值
pNode.GetDisplayText(0)//这是获得显示值

 

三、我尝试的方法
我在动态生成是绑定了一个方法,勾选值发生变化时触发一个事件,企图获得把获得的真实值赋值给treelist的node。
        checkedCBE = new RepositoryItemCheckedComboBoxEdit();
        //checkedCBE.EditValueChanged += new System.EventHandler(checkedCBE_EditValueChanged);

结果遇到了意外的问题:

在界面中勾选了值,已经显示处于选择状态了,在程序中去检查item状态,发现仍处于未选择状态。

非常不解。

        private void cbeFields_EditValueChanged(object sender, EventArgs e)
        {
            if (tlstSelLayer.FocusedNode == null) return;
            string selectNames = "";
            string selectAliass = "";
            int length = checkedCBE.Items.Count;

            for (int i = 0; i < length; i++)
            {
                //即使列中的状态已经变化,勾选状态不会发生变化,即=CheckState.Unchecked
                if (checkedCBE.Items[i].CheckState == CheckState.Checked)
                {
                   selectNames = selectNames + "," + cbeFields.Properties.Items[i].Value.ToString();
                }
            }
            tlstSelLayer.FocusedNode[NodeNameDef.CONST_Fields] = selectNames;
        }

如下图:

已经勾选成功了



程序中仍然是未选择状态,非常不解!

 

ps.1 必须实现Iconvertible?

根据 DevExpress gridview下拉框repositoryItemComboBox的使用 这篇文章的提示,“gridview的单元格不答应,提示对象必须实现Iconvertible”,是不是这个原因?

ps.2 也可能是这个原因?

this.cmb_check_CKID.RefreshEditValue();//反绑定 的 时候 这句 很重要

--------------------------------------------------------------------------------------------

四、参考资料:

一下资料各有价值

GridControl填充复选框列表项
DevExpress gridview下拉框repositoryItemComboBox的使用
ComboBoxEdit 设置选项值(单选——多选)
DevExpress中的lookupedit的使用方法详解
DevExpress:下拉框绑定数据源 (ComboBoxEdit,LookUpEdit)
关于DevExpress.XtraTreeList.TreeList控件的使用——给TreeList添加RepositoryItem以实现文本编辑功能
c#开发_Dev的关于XtraGrid的使用(GridControl小结)_Second

转载于:https://www.cnblogs.com/GISRSMAN/p/4517227.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值