在.aspx文件中我有:
<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的经验,因此根据面板在http://forums.ext.net/showthread.php?10205-More-Information-Required上的使用方式使用了GridPanel代码
它正在使用JSON对象。在尝试整个ExtJS方法之前,我发现它可以使用XML或JSON。当下拉列表的选定索引发生更改时,它会加载该用户的权限并将其添加到DataTable对象(行为string,bool,bool,bool,bool,bool),我已成功为其创建了XML对象。该函数返回一个字符串(tempData),该字符串是相关XML文档的地址。所以这里是我没有得到任何结果加载到网格中的代码:
if (tempData != String.Empty)
{
XmlDS.DataFile = tempData;
Store1.DataSource = XmlDS;
Store1.DataBind();
GridPanel1.Reload();
File.Delete(tempData);
}
尝试了GridPanel1.RefreshView(),它说它需要一个AJAX请求,但无法在其上找到任何内容。 Reload()没有做我试图做的事情(不会抛出像RefreshView()这样的异常并且直接通过罚款,但是不会加载数据。
我认为GridPanel的东西是从使用JSON对象的地方借来的,也许是asp:XmlDataSource对象无法使用的事实。但我真的不知道如何让它加载这些数据
我还尝试将数据源设置为表本身,它加载数据,但它将字符串值作为空字符串加载,并将所有布尔值加载为false。
我感谢您提供的任何帮助。如果需要更多信息,请告诉我。
谢谢,
我不能让它为我的生活加载XML。我在ext.net网站上找到了一个例子(Geoffrey给出的一个例子),它使用.xml和.xsl文件。我使用c#生成.xml文档但我没有随附的.xsl文件(我也不确定如何构建.xsl文档以尝试生成一个。)
所以我试图传递一个包含15行的DataTable对象。最终结果:
值得注意的一件事是,虽然它可能没有数据,但它确实包含所有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 /方法的原因是,如前所述,数据是从后面的代码生成的(它在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的帮助。
上次编辑我发誓
杰弗里的帮助和一些“我的例子有什么不是我的?”经过几个步骤后,我才能让它工作:
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)此时,我知道它正在加载数据,因为项目现在正好显示,但不幸的是复选框没有。所以我创建了生成我的string / bool / bool / bool / bool / bool对象列表的函数,用bool值替换为1或0.所以我的xml现在为1表示真值,例如。现在就像一个魅力。
现在进入下一步,当按钮事件被点击到具有重复结构的XML文件时,从商店中提取数据。
再次感谢杰弗里
答案 0 :(得分:1)
您可能需要发布演示完整方案的代码示例。您不必在初始Page_Load上调用GridPanel1.Reload()
。
以下示例演示如何将<asp:XmlDataSource>
控件绑定到<ext:Store>
,请参阅
http://examples.ext.net/#/GridPanel/DataSource_Controls/XmlDataSource/
希望这有帮助。
编辑:我做了一些研究,看起来需要.xslt的原因是因为<asp:XmlDataSource>
不能/不解析内部属性。必须将内部属性转换为属性。
以下示例演示了使用.xml的完整方案,其中属性配置为属性,True | False转换为小写true | false。
示例(.xml)
<?xml version="1.0" encoding="utf-8" ?>
<permissions>
<permission Item="Process 1" Access1="true" Access2="true" Access3="false" Access4="false" Access5="true" />
<permission Item="Process 2" Access1="true" Access2="true" Access3="true" Access4="false" Access5="false" />
<permission Item="Process 3" Access1="false" Access2="true" Access3="false" Access4="false" Access5="true" />
<permission Item="Process 4" Access1="true" Access2="true" Access3="false" Access4="false" Access5="false" />
<permission Item="Process 5" Access1="true" Access2="false" Access3="false" Access4="false" Access5="true" />
<permission Item="Process 6" Access1="true" Access2="false" Access3="true" Access4="false" Access5="true" />
</permissions>
示例(.aspx)
<%@ Page Language="C#" %>
<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>GridPanel with XmlDataSource - Ext.NET Examples</title>
<link href="../../../../resources/css/examples.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form runat="server">
<ext:ResourceManager runat="server" />
<asp:XmlDataSource
ID="XmlDataSource1"
runat="server"
DataFile="sample.xml"
/>
<ext:GridPanel
runat="server"
Width="650"
Height="300"
Title="Example"
AutoExpandColumn="Item">
<Store>
<ext:Store runat="server" DataSourceID="XmlDataSource1">
<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 runat="server">
<Columns>
<ext:Column ColumnID="Item" Header="Item" DataIndex="Item" />
<ext:Column Header="Access1" DataIndex="Access1" />
<ext:Column Header="Access2" DataIndex="Access2" />
<ext:Column Header="Access3" DataIndex="Access3" />
<ext:Column Header="Access4" DataIndex="Access4" />
<ext:Column Header="Access5" DataIndex="Access5" />
</Columns>
</ColumnModel>
</ext:GridPanel>
</form>
</body>
</html>
显然,您可能无法控制.xml文件的格式,因此使用.xslt进行转换可以将.xml文件转换为<asp:XmlDataSource>
可以处理的可消化格式。