前台在GridPane中添加的code:
<Plugins>
<ext:RowExpander ID="RowExpander1" runat="server" EnableCaching="true">
<Template runat="server">
<Html>
<div id="row-{Code}" style="background-color: White;"></div>
</Html>
</Template>
<DirectEvents>
<Expand OnEvent="BeforeExpand" Before="return !body.rendered;" Success="body.rendered=true;">
<EventMask ShowMask="true" Target="CustomTarget" CustomTarget="={DetailGridPanel.body}" />
<ExtraParams>
<ext:Parameter Name="id" Value="record.id" Mode="Raw" />
<ext:Parameter Name="Code" Value="record.get('Code')" Mode="Raw" />
</ExtraParams>
</Expand>
</DirectEvents>
</ext:RowExpander>
</Plugins>
后台的code:
protected void BeforeExpand(object sender, DirectEventArgs e)
{
string id = e.ExtraParams["id"];
string Code = e.ExtraParams["Code"];
Store store = new Store { ID = "StoreRow_" + Code };
JsonReader reader = new JsonReader();
reader.IDProperty = "ID";
reader.Fields.Add("ID", "GoodsID", "Quantity", "FinishQuantity");
reader.Fields[1].ServerMapping = "Goods.Name";
store.Reader.Add(reader);
Guid stockInApplyId = new Guid(id);
Haso.Swms.Client.BPMethodInvoker bpmit = new BPMethodInvoker();
object[] paramList = new object[] { stockInApplyId };
object obj = new object();
// 查询出库申请单
bpmit.InvokeMethod("Haso.Swms.BusinessProcess.Stock.StockInApplyBP", "FindByID", paramList, ref obj);
StockInApply soa = obj as StockInApply;
if (soa != null)
{
if (soa.Details != null && soa.Details.Count > 0)
{
store.DataSource = soa.Details;
store.DataBind();
}
}
this.RemoveFromCache(store.ID);
store.Render();
this.AddToCache(store.ID);
GridPanel grid = new GridPanel
{
ID = "GridPanelRow_" + Code,
StoreID = "{raw}StoreRow_" + Code,
Height = 200
};
grid.ColumnModel.Columns.Add(new Column
{
Header = "货品",
DataIndex = "GoodsID"
});
grid.ColumnModel.Columns.Add(new Column
{
Header = "数量",
DataIndex = "Quantity"
});
grid.ColumnModel.Columns.Add(new Column
{
Header = "实际数量",
DataIndex = "FinishQuantity"
});
grid.ColumnModel.ID = "GridPanelRowCM_" + Code;
grid.View.Add(new Ext.Net.GridView { ID = "GridPanelRowView_" + Code, ForceFit = true });
grid.AutoHeight = true;
//important,禁止几个方法
X.Get("row-" + Code).SwallowEvent(new string[] { "click", "mousedown", "mouseup", "dblclick" }, true);
this.RemoveFromCache(grid.ID);
//渲染前台定义的RowExpander
grid.Render("row-" + Code, RenderMode.RenderTo);
this.AddToCache(grid.ID);
}
js中的code:
window.lookup = [];
var removeFromCache = function(c) {
var c = window[c];
window.lookup.remove(c);
if (c) {
c.destroy();
}
};
var addToCache = function(c) {
window.lookup.push(window[c]);
};
另外可以在<Plugins>用组件添加:
<Plugins>
<ext:RowExpander ID="RowExpander" runat="server">
<Component>
<ext:GridPanel runat="server" ID="DetailGridPanel1" StoreID="DetailStore_info" StripeRows="true" Border="true"
AutoScroll="true" AutoHeight="true">
<%--<SelectionModel>
<ext:RowSelectionModel ID="RowSelection1" runat="server" />
</SelectionModel>--%>
<ColumnModel>
<Columns>
<ext:Column Header="货品" Width="180" DataIndex="GoodsID">
<Renderer Fn="GoodsNameEditorRenderer" />
<Editor>
<ext:ComboBox StoreID="GoodsStore" ID="GoodsID" runat="server" ValueField="ID" DisplayField="Name" Shadow="Drop"
Mode="Local" TriggerAction="All" ForceSelection="true">
</ext:ComboBox>
</Editor>
</ext:Column>
<ext:NumberColumn Header="数量" Width="100" DataIndex="Quantity" Align="Right">
<Editor>
<ext:NumberField ID="Quantity" runat="server" MinValue="0" DataIndex="Quantity" AllowBlank="false">
</ext:NumberField>
</Editor>
</ext:NumberColumn>
<ext:NumberColumn Header="价格" Width="80" DataIndex="Price" Hideable="false" Align="Right" Hidden="true">
<Editor>
<ext:NumberField ID="Price" runat="server" MinValue="0" DataIndex="Price" AllowBlank="false">
</ext:NumberField>
</Editor>
</ext:NumberColumn>
<ext:Column Header="实际数量" Width="100" DataIndex="FinishQuantity" Align="Right">
</ext:Column>
</Columns>
</ColumnModel>
</ext:GridPanel>
</Component>
<Template runat="server">
<Html>
<div id="#{DetailGridPanel}.getSelectionModel().getSelected().json.ID" style="background-color: White;"></div>
</Html>
</Template>
<DirectEvents>
<BeforeExpand OnEvent="BeforeExpand">
<EventMask ShowMask="true" Target="CustomTarget" CustomTarget="={DetailGridPanel.body}" />
<ExtraParams>
<ext:Parameter Name="id" Value="record.id" Mode="Raw" />
</ExtraParams>
</BeforeExpand>
</DirectEvents>
</ext:RowExpander>
</Plugins>