웹 양식에서 asp : TreeView 컨트롤을 사용하고 코드를 노드에 채우는 동안 예상대로 확장되어 축소됩니다. 그러나 OnTreeNodeExpanded 이벤트를 추가하면 포스트 백이 발생하지만이 이벤트에 지쳐서 이벤트가 발생하지 않으며 노드가 확장되지 않습니다. 사용자가 페이지를 다시 방문 할 때 세션에서 확장 된 노드를 저장하고 TreeView 확장 상태를 복원하려고합니다. 이 방법으로 이것을 달성하는 방법에 대한 아이디어. 감사합니다. 당신은 트 리뷰의 접힌/확장 이벤트에 대한 이벤트 처리기를 추가하기 때문에Asp TreeView OnTreeNodeExpanded 이벤트로 인해 트리 뷰가 확장되지 않습니다.
<asp:TreeView ID="tvDevices" runat="server" OnTreeNodeExpanded="TvDevices_OnTreeNodeExpandedCollapsed" OnTreeNodeCollapsed="TvDevices_OnTreeNodeExpandedCollapsed"/>
protected void Page_Load(object sender, EventArgs e)
{
foreach (string s in devices)
{
TreeNode tn = new TreeNode();
tn.Text = s.toString();
tn.SelectAction = TreeNodeSelectAction.None;
tvDevices.Ndes.Add(tn);
}
if (IsPostBack)
{
if (Session["tvDevicesState"] == null)
tvDevices.CollapseAll(); //Default to collapsed state
else
{
RestoreTreeViewState(tvDevices.Nodes, Session["tvDevicesState"] as List<string>);
}
}
else
{
tvDevices.CollapseAll();
}
}
private void SaveTreeViewState(TreeNodeCollection treeNodes, List<string> expandedList)
{
foreach (TreeNode treeNode in treeNodes)
{
if (treeNode.ChildNodes.Count > 0)
{
if (treeNode.Expanded.HasValue && treeNode.Expanded == true)
{
expandedList.Add(treeNode.Text);
}
SaveTreeViewState(treeNode.ChildNodes, expandedList);
}
}
}
private void RestoreTreeViewState(TreeNodeCollection treeNodes, List<string> expandedList)
{
foreach (TreeNode treeNode in treeNodes)
{
treeNode.Expanded = false;
if (expandedList.Contains(treeNode.Text))
{
if (treeNode.ChildNodes.Count > 0)
{
treeNode.Expanded = true;
RestoreTreeViewState(treeNode.ChildNodes, expandedList);
}
}
}
}
protected void TvDevices_OnTreeNodeExpandedCollapsed(object sender, EventArgs e)
{
List<string> expandedList = new List<string>();
SaveTreeViewState(tvDevices.Nodes, expandedList);
Session["tvDevicesState"] = expandedList;
}
나는 IsPostBack을 검사했지만 이벤트 핸들러는 아직 해고되지 않습니다. – chamza
IsPostBack 검사가 포함 된 업데이트 된 코드로 질문을 편집 할 수 있습니까? 다음으로 이벤트 처리기는 어떻게 구성되어 있습니까? Page 지시문에서 autoeventwireup = true를 갖고 있습니까? 아니면 코드 숨김 파일 (대개 PageName.Designer.cs)의 이벤트에 연결된 이벤트 처리기입니까? – sudheeshix
방금 코드를 업데이트했고 AutoEventWireUp이 webform에서 True로 설정되었습니다. – chamza