【问题标题】:DevExpress Combobox in treelist is disabled树列表中的 DevExpress 组合框被禁用
【发布时间】:2011-06-15 14:42:47
【问题描述】:

我尝试使用此代码在我的 TreeList 中显示一个组合框:

RepositoryItemLookUpEdit rep = new RepositoryItemLookUpEdit();
rep.TextEditStyle = TextEditStyles.DisableTextEditor;

//rep = new RepositoryItemComboBox();
//rep.Items.AddRange(new SecuredObject<QuestionnaireCategory>().PermissionType);
//rep.Items.AddRange(new object[] { "A", "B", "C" });


treeList1.RepositoryItems.Add(rep);

TreeListColumn disciplineColumn = treeList1.Columns.Add();
disciplineColumn.Caption = "Discipline";
disciplineColumn.Visible = true;
disciplineColumn.FieldName = "Entity.Description";
disciplineColumn.OptionsColumn.AllowEdit = false;

TreeListColumn permissionColumn = treeList1.Columns.Add();
permissionColumn.Caption = "Permissie";
permissionColumn.Visible = true;
permissionColumn.Name = "Permission";
//permissionColumn.FieldName = "PermissionType";
permissionColumn.UnboundType = UnboundColumnType.Object;
permissionColumn.ColumnEdit = rep;
//permissionColumn.OptionsColumn.ReadOnly = false;
//permissionColumn.OptionsColumn.AllowEdit = true;

rep.DataSource = permissions;
rep.DisplayMember = "Description";
rep.ValueMember = "Id";
rep.Name = "ola";
rep.ThrowExceptionOnInvalidLookUpEditValueType = true;

但是,组合仍然是空的,它显示“[无数据]”。当我在数据源处设置断点时,我看到数据源已填满。

我做错了什么?

【问题讨论】:

  • 是什么样的数据源?您确定不需要同时设置 DataMember(例如,那是一个 Dataset)吗?
  • 我正在使用包含自定义对象的列表
  • 树列表的数据源(如果有)是什么?当您单击列进行编辑时,是否会出现查找编辑/组合框。
  • treelist的数据源是一个自定义类型的List。自定义类型是泛型类型。所有这些值都显示在树列表中。组合列仅显示禁用的下拉列表。我可以看到绘制了一个组合,但我无法选择任何内容并且组合显示“[无数据]”

标签: c# winforms devexpress


【解决方案1】:

您的大部分代码看起来都不错,所以我怀疑可能是缺少字段名或数据源有问题。

以下是一个很小的示例,其中大部分是您的代码的直接副本(略微缩进),但我在运行时创建树列表并创建了一个示例通用列表用作数据源来测试它。

在构造函数的末尾,对于未绑定模式,我向树中添加了一些节点,否则我绑定到数据源并在 permissionColumn 上设置字段名。

using System;
using System.Windows.Forms;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraTreeList.Columns;
using DevExpress.XtraEditors.Controls;
using DevExpress.XtraTreeList.Data;

public class Form1 : Form
{
    [STAThread]
    static void Main()
    {
        Application.Run(new Form1());
    }

     public Form1()
    {
        this.ClientSize = new System.Drawing.Size(700, 500);
        DevExpress.XtraTreeList.TreeList treeList1 = new DevExpress.XtraTreeList.TreeList();
        this.Controls.Add(treeList1);
        treeList1.Dock = DockStyle.Fill;
        var permissions = new System.Collections.Generic.List<TestClass>();
        permissions.Add(new TestClass() { Id = 1 , Description = "Permission 1" });
        permissions.Add(new TestClass() { Id = 99, Description = "Permission 99" });

        var list = new System.Collections.Generic.List<TestClass2>();
        list.Add(new TestClass2() { Id = 1 , PermissionId = 1 , Description2 = "List Desc 1" });
        list.Add(new TestClass2() { Id = 2 , PermissionId = 99, Description2 = "List Desc 2" });



                // Your code

                RepositoryItemLookUpEdit rep = new RepositoryItemLookUpEdit();
                rep.TextEditStyle = TextEditStyles.DisableTextEditor;

                //rep = new RepositoryItemComboBox();
                //rep.Items.AddRange(new SecuredObject<QuestionnaireCategory>().PermissionType);
                //rep.Items.AddRange(new object[] { "A", "B", "C" });


                treeList1.RepositoryItems.Add(rep);

                TreeListColumn disciplineColumn = treeList1.Columns.Add();
                disciplineColumn.Caption = "Discipline";
                disciplineColumn.Visible = true;
                disciplineColumn.FieldName = "Entity.Description";
                disciplineColumn.OptionsColumn.AllowEdit = false;

                TreeListColumn permissionColumn = treeList1.Columns.Add();
                permissionColumn.Caption = "Permissie";
                permissionColumn.Visible = true;
                permissionColumn.Name = "Permission";
                //permissionColumn.FieldName = "PermissionType";
                permissionColumn.UnboundType = UnboundColumnType.Object;
                permissionColumn.ColumnEdit = rep;
                //permissionColumn.OptionsColumn.ReadOnly = false;
                //permissionColumn.OptionsColumn.AllowEdit = true;

                rep.DataSource = permissions;
                rep.DisplayMember = "Description";
                rep.ValueMember = "Id";
                rep.Name = "ola";
                rep.ThrowExceptionOnInvalidLookUpEditValueType = true;

                // End Your code


        disciplineColumn.FieldName = "Description2";
        bool unBoundMode = false;
        if (unBoundMode)
        {
            treeList1.AppendNode(new object[] { "Item1", 1 }, -1);
            treeList1.AppendNode(new object[] { "Item2", 99 }, -1);
        }
        else
        {
            treeList1.DataSource = list;
            permissionColumn.FieldName = "PermissionId";
        }


    }

}

public class TestClass
{
    public int Id             { get; set; }
    public string Description { get; set; }
}


public class TestClass2
{
    public int Id { get; set; }
    public int PermissionId { get; set; }
    public string Description2 { get; set; }
}

【讨论】:

  • 我已经尝试过您的代码,但它并没有按照我想要的方式运行。您已将树视图的数据源设置为permissions。就我而言,我有 2 个数据源:1 个用于树列表,1 个用于下拉列表。我该如何做到这一点?
  • 我已更新代码以创建第二个数据源。请注意,我已将 permissionColumn 更改为绑定到 PermissionID 而不是 Id 列,并且我还将学科列更改为绑定到 Description2,这样可以更轻松地查看哪些值和列与哪个数据源列表相关。
  • 您所谈论的更改在您的答案中不可见,但我理解您的意思,并且有效:)
【解决方案2】:

这是因为您将列设置为未绑定

...
permissionColumn.UnboundType = UnboundColumnType.Object;
...

【讨论】:

  • 不幸的是,我已将这一行注释掉,但我仍然得到 [No data]
  • 未绑定的列在这里应该可以正常工作——查找编辑器本身已绑定,但网格中的列未绑定。您只需要像任何其他未绑定编辑器一样跟踪网格的未绑定列事件。 (您可以在网格中也有一个未绑定的查找编辑器,编辑器上有一个称为GetNotInListItem 之类的事件,如果需要,您可以手动填充它。但那是不是你需要的。)
  • 我不使用树列表的任何事件
【解决方案3】:

我刚刚返回并检查了查找编辑器——我很确定您需要手动创建列,然后才会出现任何数据。 DevExpress LookupEditor 不是一个简单的下拉菜单,它基本上是一个嵌入式网格控件。如果您的项目列表中只有一个要显示的属性,它将是这样的:

  rep.Columns.Add(new LookupColumnInfo("PropertyName", 0));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    相关资源
    最近更新 更多