DevExpress的TreeList使用问题

daigua1987 2021-05-09 06:28:57

TreeList的列 默认铺满整个控件,怎么设置不铺满例如

这样的效果怎么实现
...全文
150 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
morliz子轩 2021-05-09
  • 打赏
  • 举报
回复
先处理数据层上的逻辑。比如,id与prentid 等层级关系等相关字段的实体设计,或DataTable Model设计。 再加载到DataSource数据源,直接指定相关关系,就可以了。 Demo:

/// <summary>
        /// 初始化TreeList数据
        /// </summary>
        private void InitsTree()
        {
            vBranchList = ContextHelper.GetvBranch();
            var treeBran = vBranchList.Select(p => new
            {
                p.Branid,
                p.Branno,
                p.Branna,
                p.Principal,
                Preid = p.PreId is null ? 0 : p.PreId,
                Brantype = (int)p.Brantype,
                p.Branpath
            }).ToList();

            Treelst.DataSource = ContextHelper.LinqToDataTable(treeBran);
            Treelst.KeyFieldName = "Branid";
            Treelst.ParentFieldName = "Preid";
        }
daigua1987 2021-05-09
  • 打赏
  • 举报
回复
from.Name.Substring(1, from.Name.Length - 1)窗体名称就是表名 这样写 任何窗体进来 就可以获取到相应的表名 DataTable的方法有 没用新学的C# 能用 就没管了,我试试 独立写个方法 试试
morliz子轩 2021-05-09
  • 打赏
  • 举报
回复
我肋个去。 这个方法写的咋这么绕口,【from.Name.Substring(1, from.Name.Length - 1)】这个是获得个什么string?Form.Name的处理值? 在数据库里获取,实际上就是: select * from t_[tablename] order by xxxxx 其实【GetDataSet】这个方法,可以把它直接处理成return DataTable就可以了。 再回到Form中,写一个类似我上面写的demo: 独立写一个private void InitsTree()方法,直接获取这个DataTable。 直接在其中指定 Treelst.KeyFieldName = "Id"; Treelst.ParentFieldName = "PrentId"; 把该方法挂载到需要挂载的地方,即可。
daigua1987 2021-05-09
  • 打赏
  • 举报
回复
你看看这个要怎么去修改
daigua1987 2021-05-09
  • 打赏
  • 举报
回复
引用 3 楼 morliz子轩 的回复:
是怎么处理的,代码放出来看一下。 要注意,一定要转换或生成实体List<T>或DataTable 实体对象。
 if (from.Name.Substring(0, 1) == "U")
                {
                    sql = "select * from t_" + from.Name.Substring(1, from.Name.Length - 1) + " order by " + from.Name.Substring(1, from.Name.Length - 1) + "ID";
                    if (from.Text == "产品类型")
                    {
                        TreeList tl = from.Controls.Find("treeList", true)[0] as TreeList;
                        tl.DataSource = mydate.GetDataSet(sql, "t_" + from.Name.Substring(1, from.Name.Length - 1)).Tables["t_" + from.Name.Substring(1, from.Name.Length - 1)];

                    }
                    else {
                        DataGridView dv = from.Controls.Find("dataGridView", true)[0] as DataGridView;
                        dv.AutoGenerateColumns = false;
                        dv.DataSource = mydate.GetDataSet(sql, "t_" + from.Name.Substring(1, from.Name.Length - 1)).Tables["t_" + from.Name.Substring(1, from.Name.Length - 1)];

                    }

                }
判断是第一个产品类型里面的 GetDataSet方法是
 /// <summary>
        /// 获取DataSet
        /// </summary>
        /// <param name="strSql">查询语句</param>
        /// <param name="strTable">表名</param>
        /// <returns></returns>
        public DataSet GetDataSet(string strSql, string strTable)
        {
            DataSet ds = null;

            try
            {
                SqlDataAdapter sda = new SqlDataAdapter(strSql, Conn);
                ds = new DataSet();
                sda.Fill(ds, strTable);
            }
            catch (Exception e)
            {
                throw e;
            }

            return ds;
        }
就是一个SQL返回一个DataSet 然后赋值给DataGridView
morliz子轩 2021-05-09
  • 打赏
  • 举报
回复
是怎么处理的,代码放出来看一下。 要注意,一定要转换或生成实体List<T>或DataTable 实体对象。
daigua1987 2021-05-09
  • 打赏
  • 举报
回复
引用 1 楼 morliz子轩 的回复:
先处理数据层上的逻辑。比如,id与prentid 等层级关系等相关字段的实体设计,或DataTable Model设计。 再加载到DataSource数据源,直接指定相关关系,就可以了。 Demo:

/// <summary>
        /// 初始化TreeList数据
        /// </summary>
        private void InitsTree()
        {
            vBranchList = ContextHelper.GetvBranch();
            var treeBran = vBranchList.Select(p => new
            {
                p.Branid,
                p.Branno,
                p.Branna,
                p.Principal,
                Preid = p.PreId is null ? 0 : p.PreId,
                Brantype = (int)p.Brantype,
                p.Branpath
            }).ToList();

            Treelst.DataSource = ContextHelper.LinqToDataTable(treeBran);
            Treelst.KeyFieldName = "Branid";
            Treelst.ParentFieldName = "Preid";
        }
我是先在控件里面 设置列的和等级关系的,不是在写代码的,后台代码由于是架构自动处理的,这中要怎么去设置

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧