在 .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 中存在值时生成“真”值,否则为 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)此时,我知道它正在加载数据,因为项目现在正确显示,不幸的是复选框没有。因此,我创建了生成字符串/布尔/布尔/布尔/布尔/布尔对象列表的函数,以将布尔值替换为 1 或 0。因此,例如,我的 xml 现在为 1 表示真值。现在就像一个魅力。
现在进入下一步,当单击按钮事件到具有重复结构的 XML 文件时,从 Store 中提取数据。
再次感谢杰弗里