在.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行。最終結果是:
有一點是整齊要注意的是,雖然這可能沒有數據,它包含所有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文件時,從存儲中提取數據的下一步。
再次感謝傑弗裏
嘿傑弗裏,謝謝你。奇怪的是,它看起來像我做了最後一次編輯,我發現了鏈接,並注意到我沒有XSL(也沒有想法如何生成它),所以我開始嘗試DataTable綁定(但如果可能的話,希望綁定到XML)。我注意到Reload()的行爲在我注意到它重複移動到列表頂部時的實際行爲。我即將做一個編輯來顯示我目前的問題。 – Robert 2011-03-08 19:27:23
感謝您的更新。正如你所說,數據在那裏,因爲GridPanel呈現〜15行。我的猜測是RecordField .Name屬性與正在XmlDataSource中呈現的名稱不匹配。 如果這一切都發生在Page_Load上,請在頁面上查看>源代碼併發布由Ext.NET呈現的初始化腳本塊。該腳本塊也應包含數據。或者,如果您想保密,請發送至[email protected]。 – 2011-03-08 23:33:56
當試圖加載XML時,我什麼也沒有得到,所以我認爲我完全不正確。我得到15行的方式是使用DataTable(不是我想要的路由,因爲我打算將網格導出回XML以導出到數據庫)。此外,RecordField名稱匹配。我編輯了這個問題以包含XML結構,這也可能是我錯誤的地方。 – Robert 2011-03-09 01:32:49