2

在 .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 中提取数据。

再次感谢杰弗里

4

1 回答 1

1

您可能需要发布演示完整场景的代码示例。您不必调用GridPanel1.Reload()初始 Page_Load。

以下示例演示将<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>可以处理的可消化格式的方法。

于 2011-03-08T18:12:21.357 回答