DataTreeListView: почему свойство CheckedAspectName отображается в своем собственном столбце? - PullRequest
0 голосов
/ 13 января 2019

Я использую обертку ObjectListView от Филиппа Пайпера, в частности, DataTreeListView.

bool? IsCheckBoxChecked является частью моей модели и назначается как CheckedAspectName. Мое намерение состоит в том, чтобы это свойство вернуло флажки в столбце «Имя» (крайний левый столбец). Я хочу, чтобы только столбец «Имя» отображался на DataTreeListView.

Проблема Когда отображается дерево, «IsCheckBoxChecked» отображается в виде собственного столбца (см. Прикрепленный снимок экрана). Это как задумано? Если да, могу ли я скрыть «IsCheckBoxChecked» от пользователя?

enter image description here

код

Код самодостаточен - просто создайте проект WinForms с пустой формой и скопируйте / вставьте код основной формы, показанный ниже

Мой класс DataTreeListView

using BrightIdeasSoftware;
using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace DataTreeListViewTriStateCBs
{
    class ClsTriStateFooTree : BrightIdeasSoftware.DataTreeListView
    {
        IList<ClsTreeItemModel> itemList = null;

        public ClsTriStateFooTree() : base()
        {

            CellEditUseWholeCell = false;
            CheckBoxes = true;
            CheckedAspectName = "IsCheckBoxChecked";
            GridLines = true;
            HierarchicalCheckboxes = false;
            KeyAspectName = "Id";
            MultiSelect = false;
            Name = "objFooTree";
            ParentKeyAspectName = "ParentId";
            RootKeyValue = 0;
            ShowGroups = false;
            ShowImagesOnSubItems = false;
            ShowKeyColumns = false;
            TabIndex = 1;
            TriStateCheckBoxes = true;
            UseAlternatingBackColors = true;
            UseCompatibleStateImageBehavior = false;
            UseSubItemCheckBoxes = false;
            View = System.Windows.Forms.View.Details;
            VirtualMode = true;

            itemList = new List<ClsTreeItemModel>();
            itemList.Clear();

            ItemChecked += ClsTriStateFooTree_ItemChecked;
        }

        private void ClsTriStateFooTree_ItemChecked(object sender, ItemCheckedEventArgs e)
        {
            OLVListItem objOLVListItem = (OLVListItem)e.Item;
            ClsTreeItemModel objTreeItemModel = (ClsTreeItemModel)objOLVListItem.RowObject;
        }

        public void AddItemToTreeModel(int key, int parentKey, string fooName)
        {
            itemList.Add(new ClsTreeItemModel(key, parentKey, fooName));
        }

        public void LoadObjFooTree()
        {
            ItemChecked -= ClsTriStateFooTree_ItemChecked;
            DataSource = itemList;
            ItemChecked += ClsTriStateFooTree_ItemChecked;
        }

        private class ClsTreeItemModel
        {
            int id;
            int parentId;
            string name;
            bool? isCheckBoxChecked;

            public ClsTreeItemModel(int id, int parentId, string name)
            {
                this.id = id;
                this.parentId = parentId;
                this.name = name;
                this.IsCheckBoxChecked = false;
            }

            public int Id { get => id; set => id = value; }
            public int ParentId { get => parentId; set => parentId = value; }
            public string Name { get => name; set => name = value; }
            public bool? IsCheckBoxChecked { get => isCheckBoxChecked; set => isCheckBoxChecked = value; }
        }
    }
}

Форма Основной класс

using System.Windows.Forms;

namespace DataTreeListViewTriStateCBs
{
    public partial class ClsFormMain : Form
    {
        public ClsFormMain()
        {
            InitializeComponent();

            ClsTriStateFooTree objFooTree = new ClsTriStateFooTree()
            {
                Location = new System.Drawing.Point(12, 12),
                Dock = DockStyle.Fill
            };

            Controls.Add(objFooTree);

            objFooTree.AddItemToTreeModel(1, 0, "A");
            objFooTree.AddItemToTreeModel(2, 1, "A.1");
            objFooTree.AddItemToTreeModel(3, 1, "A.2");
            objFooTree.AddItemToTreeModel(4, 1, "A.3");
            objFooTree.AddItemToTreeModel(5, 0, "B");
            objFooTree.AddItemToTreeModel(6, 5, "B.1");
            objFooTree.AddItemToTreeModel(7, 5, "B.2");
            objFooTree.AddItemToTreeModel(8, 5, "B.3");
            objFooTree.AddItemToTreeModel(9, 8, "B.3.1");

            objFooTree.LoadObjFooTree();

            objFooTree.ExpandAll();
            objFooTree.AutoResizeColumns();
        }
    }
}
...