zoukankan      html  css  js  c++  java
  • 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
    版权声明:本博原创文章可以被转载,但是在未经本人许可前,不得用于任何商业用途或其他以盈利为目的的用途。如需转载,请在转载时声明作者、保留出处。本人保留对本文的一切权利。 作者:AllenRobin Blog:http://gisrsman.cnblogs.com
  • 相关阅读:
    Android安装apk
    Android获取应用程序版本信息
    Handler消息传递机制
    Activity的启动模式
    cocopods的使用
    ios9 的新特性
    静态库的制作详解
    真机调试
    时间差计算(给定两时间,转换为时间差)
    socket 通信机制的实现
  • 原文地址:https://www.cnblogs.com/GISRSMAN/p/4517227.html
Copyright © 2011-2022 走看看