Я использую ASP.NET TreeView
на странице с пользовательским XmlDataSource
. Когда пользователь нажимает на узел дерева, появляется DetailsView
и редактирует кучу вещей об основном объекте. Все это работает правильно, и базовый объект обновляется в моих фоновых классах управления объектами. Тем не менее, мой TreeView
просто не обновляет дисплей. Либо сразу (что мне бы хотелось), либо при полной перезагрузке страницы (это минимальный полезный уровень, на котором мне это нужно). Я плохо разбираюсь в подклассах XmlDataSource
? Я действительно не знаю. Кто-нибудь может указать мне правильное направление?
Разметка выглядит примерно так (шелуха удалена):
<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\" />";
}
}
}