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
时间: 2024-09-30 15:01:26

DEV RepositoryItem控件绑定 CheckedComboBoxEdit的相关文章

DataGridView控件绑定数据源

前言: 最近听说DataGridView控件能直接绑定数据源.而不用穿越这层那层的忍辱负重.获取数据.真是高兴的屁颠屁颠的.后来一想二狗肯定不会弄.特意写了一个笨蛋版的教程--也算记录生活.欢度端午了.粽子就不送给大家了.但是大家可以找我来要呦!数量有限送完为止!--chenchen --步骤 1 添加控件 2 添加数据源 中间过程就是点下一步就不截图了.最后选择的这个是每次连接获取数据库数据的表和表的字段 3 三个组件意思 Adapter控件:连接数据库获取数据 DataSet:存放获取好的数

vue2.0 之表单控件绑定

表单控件绑定v-model 1.文本 <template> <div> <input type="text" name="" v-model="myVal"><br/> {{ myVal }}<br/> <input type="text" name="" v-model.lazy="myVal1"><br/&

Asp.net--DropDownList控件绑定数据库数据

DropDownList控件绑定数据库数据:DB是公共类,reDt是公共类中的方法 放在Page_Load事件中 if (!IsPostBack) { DB db = new DB(); DataTable dt = db.reDt("select * from provinceInfo order by provinceid asc"); ddlsmprovince.DataSource = dt; ddlsmprovince.DataTextField = ddlsmprovinc

对话框控件绑定变量及操作

对话框控件绑定变量 右键单击控件,添加变量. 复选框:添加变量为控件变量.可以操作控件. 列表框:选择添加变量的控件的ID. 列表框:选择添加的变量的类别,Control为控件控制类型.Value为关联值变量,可以设置数据验证 编辑框:添加的控件变量名. 复选框:不选中,则为控件关联一个变量.不可以操作控件. 列表框:选择关联变量类型. 编辑框:添加的控件变量名.  头文件中添加的变量 // CMFCTestDlg dialog class CMFCTestDlg : public CDialo

C# Winform 关于ListView控件绑定DataTable

今天用到ListView控件,这里总结一下ListView控件绑定DataTable的方法 下面需要特别注意的是,绑定的过程中实现绑定控件的column的属性,再进行item的绑定. 与DataGridView不同的是,不能直接使用DataSourse绑定, 再者,绑定第一个Items的时候一定要实例化一个Item进行单独绑定,因为第一个Item与后面的不用即Item与SubItem的区别,下面的代码中也给出了相应的注释 [csharp] view plain copy private void

vue.js基础知识篇(3):计算属性、表单控件绑定

第四章:计算属性 为了避免过多的逻辑造成模板的臃肿不堪,可使用计算属性来简化逻辑. 1.什么是计算属性 <!DOCTYPE html> <html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body> <div id="example"> <

c#中DropDownList控件绑定枚举数据

c# asp.net 中DropDownList控件绑定枚举数据 1.枚举(enum)代码: private enum heros { 德玛 = 0, 皇子 = 10, 大头 = 20, 剑圣 = 30, } 如果不为枚举数列表中的元素指定值,则它们的值将自动递增,从1开始. 2.cs代码: private void LoadData() { //检索枚举heros返回包含每个成员的值的数组 Array herosArray = Enum.GetValues(typeof(heros)); fo

关于vue.js中表单控件绑定练习

html: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>表单控件绑定</title></head><body> <!-- v-model在表单控件元素上实现数据的双向绑定 --> <div id="app-1"> <input ty

在aspx页动态加载ascx页面内容,给GridView控件绑定数据

在aspx页动态加载ascx页面内容 //加载ascx页面内容Control c1 = this.Page.LoadControl("WebUserControl1.ascx");//绑定到aspx页的PlaceHolder控件上PlaceHolder1.Controls.Add(c1); DataSet ds = SqlServerHelpr.GetDataSet("select * from dbo.Table_1");//给GridView控件绑定数据Grid