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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM