Я использую обертку ObjectListView от Филиппа Пайпера, в частности, DataTreeListView.
bool? IsCheckBoxChecked
является частью моей модели и назначается как CheckedAspectName
. Мое намерение состоит в том, чтобы это свойство вернуло флажки в столбце «Имя» (крайний левый столбец). Я хочу, чтобы только столбец «Имя» отображался на DataTreeListView
.
Проблема
Когда отображается дерево, «IsCheckBoxChecked» отображается в виде собственного столбца (см. Прикрепленный снимок экрана). Это как задумано? Если да, могу ли я скрыть «IsCheckBoxChecked» от пользователя?
код
Код самодостаточен - просто создайте проект 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();
}
}
}