2011-03-08 37 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

相關問題