C# 刷新树列表的数据源后获取树列表的状态?
我有一个DevExpress树列表,它的数据源是一个对象列表。我向列表中添加新项,然后使用这段代码刷新树列表数据源C# 刷新树列表的数据源后获取树列表的状态?,c#,winforms,devexpress,xtratreelist,C#,Winforms,Devexpress,Xtratreelist,我有一个DevExpress树列表,它的数据源是一个对象列表。我向列表中添加新项,然后使用这段代码刷新树列表数据源treelist1.RefreshDataSource() 刷新后,所有展开的和选定的节点都将崩溃,这很烦人。 刷新树列表的数据源后,如何获取树列表的状态?我建议您查看以下示例: 其主要思想是在刷新数据之前保存树列表的状态,并在刷新数据之后加载状态。我建议您查看以下示例: 其主要思想是在刷新数据之前保存树列表的状态,并在刷新数据之后加载状态。以下代码: public class Tr
treelist1.RefreshDataSource()代码>
刷新后,所有展开的和选定的节点都将崩溃,这很烦人。
刷新树列表的数据源后,如何获取树列表的状态?我建议您查看以下示例:
其主要思想是在刷新数据之前保存树列表的状态,并在刷新数据之后加载状态。我建议您查看以下示例:
其主要思想是在刷新数据之前保存树列表的状态,并在刷新数据之后加载状态。以下代码:
public class TreeListViewState
{
private ArrayList expanded;
private ArrayList selected;
private object focused;
private int topIndex;
public TreeListViewState()
: this(null)
{
}
public TreeListViewState(TreeList treeList)
{
this.treeList = treeList;
expanded = new ArrayList();
selected = new ArrayList();
}
public void Clear()
{
expanded.Clear();
selected.Clear();
focused = null;
topIndex = 0;
}
private ArrayList GetExpanded()
{
var op = new OperationSaveExpanded();
TreeList.NodesIterator.DoOperation(op);
return op.Nodes;
}
private ArrayList GetSelected()
{
var al = new ArrayList();
foreach (TreeListNode node in TreeList.Selection)
{
al.Add(node.GetValue(TreeList.KeyFieldName));
}
return al;
}
public void LoadState()
{
TreeList.BeginUpdate();
try
{
// TreeList.CollapseAll();
TreeListNode node;
foreach (object key in expanded)
{
node = TreeList.FindNodeByKeyID(key);
if (node != null)
{
node.Expanded = true;
}
}
foreach (object key in selected)
{
node = TreeList.FindNodeByKeyID(key);
if (node != null)
{
TreeList.Selection.Add(node);
}
}
TreeList.FocusedNode = TreeList.FindNodeByKeyID(focused);
}
finally
{
TreeList.EndUpdate();
TreeList.TopVisibleNodeIndex = TreeList.GetVisibleIndexByNode(TreeList.FocusedNode) - topIndex;
}
}
public void SaveState()
{
if (TreeList.FocusedNode != null)
{
expanded = GetExpanded();
selected = GetSelected();
focused = TreeList.FocusedNode[TreeList.KeyFieldName];
topIndex = TreeList.GetVisibleIndexByNode(TreeList.FocusedNode) - TreeList.TopVisibleNodeIndex;
}
else
{
Clear();
}
}
private TreeList treeList;
public TreeList TreeList
{
get
{
return treeList;
}
set
{
treeList = value;
Clear();
}
}
private class OperationSaveExpanded : TreeListOperation
{
private ArrayList al = new ArrayList();
public override void Execute(TreeListNode node)
{
if (node.HasChildren && node.Expanded)
{
al.Add(node.GetValue(node.TreeList.KeyFieldName));
}
}
public ArrayList Nodes
{
get
{
return al;
}
}
}
}
请输入以下代码:
public class TreeListViewState
{
private ArrayList expanded;
private ArrayList selected;
private object focused;
private int topIndex;
public TreeListViewState()
: this(null)
{
}
public TreeListViewState(TreeList treeList)
{
this.treeList = treeList;
expanded = new ArrayList();
selected = new ArrayList();
}
public void Clear()
{
expanded.Clear();
selected.Clear();
focused = null;
topIndex = 0;
}
private ArrayList GetExpanded()
{
var op = new OperationSaveExpanded();
TreeList.NodesIterator.DoOperation(op);
return op.Nodes;
}
private ArrayList GetSelected()
{
var al = new ArrayList();
foreach (TreeListNode node in TreeList.Selection)
{
al.Add(node.GetValue(TreeList.KeyFieldName));
}
return al;
}
public void LoadState()
{
TreeList.BeginUpdate();
try
{
// TreeList.CollapseAll();
TreeListNode node;
foreach (object key in expanded)
{
node = TreeList.FindNodeByKeyID(key);
if (node != null)
{
node.Expanded = true;
}
}
foreach (object key in selected)
{
node = TreeList.FindNodeByKeyID(key);
if (node != null)
{
TreeList.Selection.Add(node);
}
}
TreeList.FocusedNode = TreeList.FindNodeByKeyID(focused);
}
finally
{
TreeList.EndUpdate();
TreeList.TopVisibleNodeIndex = TreeList.GetVisibleIndexByNode(TreeList.FocusedNode) - topIndex;
}
}
public void SaveState()
{
if (TreeList.FocusedNode != null)
{
expanded = GetExpanded();
selected = GetSelected();
focused = TreeList.FocusedNode[TreeList.KeyFieldName];
topIndex = TreeList.GetVisibleIndexByNode(TreeList.FocusedNode) - TreeList.TopVisibleNodeIndex;
}
else
{
Clear();
}
}
private TreeList treeList;
public TreeList TreeList
{
get
{
return treeList;
}
set
{
treeList = value;
Clear();
}
}
private class OperationSaveExpanded : TreeListOperation
{
private ArrayList al = new ArrayList();
public override void Execute(TreeListNode node)
{
if (node.HasChildren && node.Expanded)
{
al.Add(node.GetValue(node.TreeList.KeyFieldName));
}
}
public ArrayList Nodes
{
get
{
return al;
}
}
}
}
尝试在代码中添加一些描述。你的代码为什么工作?您的代码是如何工作的?上面的代码是从最初的devxpress支持示例中提取和修改的,Lex EPoX(如何保存…)在文章中引用了该示例。最好直接去那里。试着在代码中添加一些描述。你的代码为什么工作?您的代码是如何工作的?上面的代码是从最初的devxpress支持示例中提取和修改的,Lex EPoX(如何保存…)在文章中引用了该示例。最好直走。