在.aspx文件我有:Ext.NET的GridPanel与XML数据源
<asp:XmlDataSource runat="server" ID="XmlDS" />
...
<ext:ResourceManager ID="ResourceManager1" runat="server" />
<ext:GridPanel
ID="GridPanel1"
runat="server"
StripeRows="true"
Title="User Permissions"
TrackMouseOver="true"
Width="600"
Height="350"
AutoExpandColumn="Item">
<Store>
<ext:Store ID="Store1" runat="server">
<Reader>
<ext:ArrayReader>
<Fields>
<ext:RecordField Name="Item" />
<ext:RecordField Name="Access1" Type="Boolean" />
<ext:RecordField Name="Access2" Type="Boolean" />
<ext:RecordField Name="Access3" Type="Boolean" />
<ext:RecordField Name="Access4" Type="Boolean" />
<ext:RecordField Name="Access5" Type="Boolean" />
</Fields>
</ext:ArrayReader>
</Reader>
</ext:Store>
</Store>
<ColumnModel ID="ColumnModel1" runat="server">
<Columns>
<ext:Column ColumnID="Item" Header="Item" DataIndex="Item" />
<ext:Column ColumnID="Access1" Header="Access1" DataIndex="Access1" />
<ext:Column ColumnID="Access2" Header="Access2" DataIndex="Access2" />
<ext:Column ColumnID="Access3" Header="Access3" DataIndex="Access3" />
<ext:Column ColumnID="Access4" Header="Access4" DataIndex="Access4" />
<ext:Column ColumnID="Access5" Header="Access5" DataIndex="Access5" />
</Columns>
</ColumnModel>
<SelectionModel>
<ext:RowSelectionModel ID="RowSelectionModel1" runat="server" SingleSelect="true" />
</SelectionModel>
</ext:GridPanel>
请注意,我有ExtJS的/ Ext.NET没有经验所以GridPanel中的代码是根据面板的使用方式使用on http://forums.ext.net/showthread.php?10205-More-Information-Required
它在那里使用JSON对象。在尝试整个ExtJS方法之前,我发现它可以使用XML或JSON。当下拉列表中所选的索引发生变化时,它会加载该用户的权限并将其添加到DataTable对象(行是字符串,布尔型,布尔型,布尔型,布尔型,布尔型),我已成功创建了该XML对象。该函数返回一个字符串(tempData),它是相关XML文档的地址。所以这里是我没有得到任何结果在网格中加载代码:
if (tempData != String.Empty)
{
XmlDS.DataFile = tempData;
Store1.DataSource = XmlDS;
Store1.DataBind();
GridPanel1.Reload();
File.Delete(tempData);
}
试图GridPanel1.RefreshView(),它说,它需要一个Ajax请求,无法找到任何东西。重新加载()并没有做我想要做的事情(不抛出像RefreshView()这样的异常,并且通过正确的传递,但不加载数据。
我在想GridPanel的东西是从使用JSON对象的地方借用的,也许事实上一个asp:XmlDataSource对象不可用,但我真的不知道如何让它加载这个数据
我也尝试将数据源设置为表本身,它加载数据,但它将字符串值加载为空字符串并将所有布尔值加载为假。信息是需要,请让我知道。
感谢,
我不能让它加载XML为我的生活。我在使用.xml和.xsl文件的ext.net网站(与Geoffrey相同)上找到了一个例子。我使用c#生成.xml文档,但是我没有一个与之配套的.xsl文件(我也不确定如何构建一个.xsl文档来尝试生成一个.xsl文档)。
所以我试图传递一个DataTable对象15行。最终结果是:
有一点是整齐要注意的是,虽然这可能没有数据,它包含所有15行。我假设它尝试加载数据集,但只是失败。
在.aspx文件我有:
<ext:ResourceManager ID="ResourceManager1" runat="server" />
<ext:GridPanel
ID="GridPanel1"
runat="server"
StripeRows="true"
Title="User Permissions"
TrackMouseOver="true"
Width="600"
Height="350"
AutoExpandColumn="Item">
<Store>
<ext:Store ID="Store1" runat="server">
<Reader>
<ext:JsonReader>
<Fields>
<ext:RecordField Name="Item" />
<ext:RecordField Name="Access1" Type="Boolean" />
<ext:RecordField Name="Access2" Type="Boolean" />
<ext:RecordField Name="Access3" Type="Boolean" />
<ext:RecordField Name="Access4" Type="Boolean" />
<ext:RecordField Name="Access5" Type="Boolean" />
</Fields>
</ext:JsonReader>
</Reader>
</ext:Store>
</Store>
<ColumnModel ID="ColumnModel1" runat="server">
<Columns>
<ext:Column ColumnID="Item" Header="Item" DataIndex="Item" />
<ext:CheckColumn ColumnID="Access1" Header="Access1" DataIndex="Access1" Editable="true" Width="40px" />
<ext:CheckColumn ColumnID="Access2" Header="Access2" DataIndex="Access2" Editable="true" Width="40px" />
<ext:CheckColumn ColumnID="Access3" Header="Access3" DataIndex="Access3" Editable="true" Width="40px" />
<ext:CheckColumn ColumnID="Access4" Header="Access4" DataIndex="Access4" Editable="true" Width="40px" />
<ext:CheckColumn ColumnID="Access5" Header="Access5" DataIndex="Access5" Editable="true" Width="40px" />
</Columns>
</ColumnModel>
<SelectionModel>
<ext:RowSelectionModel ID="RowSelectionModel1" runat="server" SingleSelect="true" />
</SelectionModel>
</ext:GridPanel>
而这正是我试图加载数据(TempData的是字符串地址为XML文档的XML是后产生的部分下拉列表选择)。
List<List<Object>> PermissionList = BL.Person.getPermissionsList(Convert.ToInt32(ddlUserName.SelectedValue));
DataTable table = BL.Data.CreatePermissionsTable(PermissionList);
string tempData = BL.Data.CreateXML(table, "Permission", Convert.ToInt32(ddlUserName.SelectedValue));
if (tempData != String.Empty)
{
ChangeAccess.Style.Add("display", "block");
Store1.DataSource = table;
Store1.DataBind();
File.Delete(tempData);
}
笔记使用DataSet的对象时,该字符串的TempData/file.delete是相当没有意义的。
最终目标是使用XML,但如果它在此期间需要使用DataTable,那么我会走这条路。我目前没有使用json/method的原因是,正如所提到的那样,数据是从后面的代码生成的(它在item/personid/accesslevel表的useraccess中存在值时生成'true'值,否则为false。不是实际的数据库条目)。再次
感谢,
XML结构:
<permissions>
<permission>
<Item>Process 1</Item>
<Access1>True</Access1>
<Access2>True</Access2>
<Access3>False</Access3>
<Access4>False</Access4>
<Access5>False</Access5>
</permission>
<permission>
<Item>Process 2</Item>
<Access1>True</Access1>
<Access2>True</Access2>
<Access3>True</Access3>
<Access4>False</Access4>
<Access5>False</Access5>
</permission>
</permissions>
我试图再次重新加载.XML这一次,它似乎被拉动,排序的,所产生的行是在某处返回100行的邻域(超出15个权限元素)。
请注意,我没有用于TransformFile的.xsl文件。这不会是我希望的问题吗?
我需要用实际的代码登录到桌面,我会尝试获取您请求的渲染。感谢Geoffrey的帮助。
最后编辑我发誓
Geoffrey的帮助和一个位之间“是什么的例子有我的没有?”经过几个步骤后,我能够使其正常工作:
1)必须生成一个.XSL文件,以便为.XML文件提供结构。我使用plants.xsl文件作为模板。
2),设置我的XmlDS对象的情况下,我把它改成这样:
if (tempData != String.Empty)
{
ChangeAccess.Style.Add("display", "block");
XmlDS.DataFile = tempData;
XmlDS.TransformFile = tempData.Remove(tempData.LastIndexOf('\\')) + "\\Permissions.xsl";
Store1.DataSource = XmlDS;
Store1.DataBind();
File.Delete(tempData);
}
3)在这一点上,我知道这是在加载数据的项目现在都正常显示,不幸的是,复选框不是。所以我做了生成我的字符串/ bool/bool/bool/bool/bool对象列表的函数,用一个1或一个0代替布尔值。所以我的xml现在是1,例如一个真值。现在就像魅力一样。
现在,当点击按钮事件到具有重复结构的XML文件时,从存储中提取数据的下一步。
再次感谢杰弗里
嘿杰弗里,谢谢你。奇怪的是,它看起来像我做了最后一次编辑,我发现了链接,并注意到我没有XSL(也没有想法如何生成它),所以我开始尝试DataTable绑定(但如果可能的话,希望绑定到XML)。我注意到Reload()的行为在我注意到它重复移动到列表顶部时的实际行为。我即将做一个编辑来显示我目前的问题。 – Robert 2011-03-08 19:27:23
感谢您的更新。正如你所说,数据在那里,因为GridPanel呈现〜15行。我的猜测是RecordField .Name属性与正在XmlDataSource中呈现的名称不匹配。 如果这一切都发生在Page_Load上,请在页面上查看>源代码并发布由Ext.NET呈现的初始化脚本块。该脚本块也应包含数据。或者,如果您想保密,请发送至[email protected]。 – 2011-03-08 23:33:56
当试图加载XML时,我什么也没有得到,所以我认为我完全不正确。我得到15行的方式是使用DataTable(不是我想要的路由,因为我打算将网格导出回XML以导出到数据库)。此外,RecordField名称匹配。我编辑了这个问题以包含XML结构,这也可能是我错误的地方。 – Robert 2011-03-09 01:32:49