2011-03-08 31 views
2

在.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行。最终结果是:

enter image description here

有一点是整齐要注意的是,虽然这可能没有数据,它包含所有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文件时,从存储中提取数据的下一步。

再次感谢杰弗里

回答

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>可处理的易消化格式的方法。

+0

嘿杰弗里,谢谢你。奇怪的是,它看起来像我做了最后一次编辑,我发现了链接,并注意到我没有XSL(也没有想法如何生成它),所以我开始尝试DataTable绑定(但如果可能的话,希望绑定到XML)。我注意到Reload()的行为在我注意到它重复移动到列表顶部时的实际行为。我即将做一个编辑来显示我目前的问题。 – Robert 2011-03-08 19:27:23

+0

感谢您的更新。正如你所说,数据在那里,因为GridPanel呈现〜15行。我的猜测是RecordField .Name属性与正在XmlDataSource中呈现的名称不匹配。 如果这一切都发生在Page_Load上,请在页面上查看>源代码并发布由Ext.NET呈现的初始化脚本块。该脚本块也应包含数据。或者,如果您想保密,请发送至[email protected]。 – 2011-03-08 23:33:56

+0

当试图加载XML时,我什么也没有得到,所以我认为我完全不正确。我得到15行的方式是使用DataTable(不是我想要的路由,因为我打算将网格导出回XML以导出到数据库)。此外,RecordField名称匹配。我编辑了这个问题以包含XML结构,这也可能是我错误的地方。 – Robert 2011-03-09 01:32:49

相关问题