最近在测试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类型解决问题。
代码如下:
其中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值后无效了。