사용자 정의 XmlDataSource
이있는 페이지에서 ASP.NET TreeView
을 사용하고 있습니다. 사용자가 트리의 노드를 클릭하면 DetailsView
이 나타나 기본 객체에 대한 여러 가지 사항을 편집합니다. 이 모든 것이 제대로 작동하고 기본 객체가 내 백그라운드 객체 관리 클래스에서 업데이트됩니다. 그러나 내 TreeView
은 디스플레이를 업데이트하지 않습니다. 즉각적으로 (내가 원하는) 또는 전체 페이지를 다시로드 (최소한 필요한 유용한 수준)해야합니다. XmlDataSource
을 하위 클래스로 하위 클래스 화합니까? 나는 정말로 모른다. 누구든지 좋은 방향으로 나를 가리킬 수 있습니까?왜 내 TreeView가 업데이트되지 않습니까?
마크 업이 같은 대한 보인다 (왕겨 제거) :
<data:DefinitionDataSource runat="server" ID="DefinitionTreeSource" RootDefinitionID="uri:1"></data:DefinitionDataSource>
<asp:TreeView ID="TreeView" runat="server" DataSourceID="DefinitionTreeSource">
<DataBindings>
<asp:TreeNodeBinding DataMember="definition" TextField="name" ValueField="id" />
</DataBindings>
</asp:TreeView>
<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False"
DataKeyNames="Id" DataSourceID="DefinitionSource" DefaultMode="Edit">
<Fields>
<asp:BoundField DataField="Name" HeaderText="Name" HeaderStyle-Wrap="false" SortExpression="Name" />
<asp:CommandField ShowCancelButton="False" ShowInsertButton="True" ShowEditButton="True"
ButtonType="Button" />
</Fields>
</asp:DetailsView>
그리고 DefinitionTreeSource
코드는 다음과 같습니다
public class DefinitionDataSource : XmlDataSource
{
public string RootDefinitionID
{
get
{
if (ViewState["RootDefinitionID"] != null)
return ViewState["RootDefinitionID"] as String;
return null;
}
set
{
if (!Object.Equals(ViewState["RootDefinitionID"], value))
{
ViewState["RootDefinitionID"] = value;
DataBind();
}
}
}
public DefinitionDataSource() { }
public override void DataBind()
{
base.DataBind();
setData();
}
private void setData()
{
String defXML = "<?xml version=\"1.0\" ?>";
Test.Management.TestManager.Definition root =
Test.Management.TestManager.Definition.GetDefinitionById(RootDefinitionID);
if (root != null)
this.Data = defXML + root.ToXMLString();
else
this.Data = defXML + "<definition id=\"null\" name=\"Set Root Node\" />";
}
}
}
page_load는 어떤 모양입니까? –
지금은 아무 것도 없습니다. 결국에는 거기에 몇 가지 스타일을 조정할 것입니다 (tree.Font.Name, tree.ShowLines 등)하지만 지금은 코드 비하인드가 빈 함수 만 포함합니다. – Brendan
데이터 원본에서 캐싱을 사용하지 않으면 전체 페이지를 다시로드 할 때 노드 이름의 변경 사항이 표시됩니다. 그러나 detailsview가 업데이트를 거쳐 변경 사항을 표시하지는 않습니다. – Brendan