DevExpress TreeLookUpEdit控件绑定不能选定某项数据,选定某项无效的坑

最近在测试DevExpressv20版本的 TreeLookUpEdit时,发现,TreeLookUpEdit选中某项时的一个坑,记录一下:

发现错误:

(1)通过select返回所有的分类,select Id,ItemName,ParentId    FROM t_Item  获取所有的分类,查询结果放存在DataTable 中

(2)将DataTable绑定到TreeLookUpEdit

(3)根据要编辑的当前记录的值,选中TreeLookUpEdit的某个节点

发现无效。

折腾了2天终于发现原因:

select Id,ItemName,ParentId    FROM t_Item返回的DataTable 中,Id和ParentId    均为Int64类型,而TreeLookUpEdit绑定时,必须为int类型才能进行选择。

最后,只好把DataTable的Id和ParentId 转成int类型解决问题。

DevExpress TreeLookUpEdit控件绑定不能选定某项数据,选定某项无效的坑_第1张图片

 

代码如下:

 

其中treelueHouseStatus为TreeLookUpEdit控件。

public DataTable GetListSelect(string strWhere )
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("select Id,ItemName,ParentId");
            strSql.Append(" FROM t_Item ");
            if (strWhere.Trim() != "")
            {
                strSql.Append(" where " + strWhere);
            }
            DataTable dt = SqliteHelper1.Query(strSql.ToString()).Tables[0];
            var dataTable = new DataTable();

            dataTable.Columns.Add("Id", typeof(int));
            dataTable.Columns.Add("ParentId", typeof(int));
            dataTable.Columns.Add("ItemName", typeof(string));

            for (int k = 0; k < dt.Rows.Count; k++)
            {
                dataTable.Rows.Add(int.Parse(dt.Rows[k]["Id"].ToString()), int.Parse(dt.Rows[k]["ParentId"].ToString()), dt.Rows[k]["ItemName"].ToString());
            }

            return dataTable;

        }
        TreeLookUpEdit的绑定方法:

 void BindTreeListHouseStatus()
        {
            DAL.DAL_t_Item dal = new DAL.DAL_t_Item();
            DataTable dt = dal.GetListSelect("RootCode='homestatus'");
            this.treelueHouseStatus.Properties.DataSource = dt; //绑定数据  treelueHouseStatus.Properties.DisplayMember = "ItemName";  //要在树里展示的

            treelueHouseStatus.Properties.ValueMember = "Id";    //对应的value
            this.treelueHouseStatus.Properties.TreeList.DataSource = null;
            this.treelueHouseStatus.Properties.TreeList.DataSource = dt;
            this.treelueHouseStatus.Properties.TreeList.ParentFieldName = "ParentId"; //      
            this.treelueHouseStatus.Properties.TreeList.KeyFieldName = "Id";//设置ID  父id
            this.treelueHouseStatus.Properties.TreeList.ExpandAll();

        }

TreeLookUpEdit选中某个节点:

 this.treelueHouseStatus.EditValue = model.HouseStatusId;

获取选择的节点的ID:

int HouseStatusId = int.Parse(treelueHouseStatus.EditValue.ToString());

说明,本人专门测试了一下,将 dataTable.Columns.Add("Id", typeof(int));改为 dataTable.Columns.Add("Id", typeof(int64));,就不能选定我们需要的节点了。

设置 this.TreeLookUpEdit.EditValue值后无效了。

 

 

你可能感兴趣的:(.net类,devexpress)