GridPanel 子项用 tab 弹出 <mce:script type="text/javascript"><!-- var DetailsRender = function() { return '<img class="imgEdit" ext:qtip="点击查看编辑详细信息" style="cursor:pointer;" mce_style="cursor:pointer;" src="../../icons/table_edit-png/coolite.axd" mce_src="icons/table_edit-png/coolite.axd" />'; } var pageControlRender = function() { return '<img class="imgControl" ext:qtip="点击查看编辑详细信息" style="cursor:pointer;" mce_style="cursor:pointer;" src="../../icons/table_edit-png/coolite.axd" mce_src="icons/table_edit-png/coolite.axd" />'; } var LogRender = function(value) { return '<img class="imgEdit" id="etcitsLog' + value + '" style="cursor:pointer;" mce_style="cursor:pointer;" src="../../icons/table_multiple-png/coolite.axd" mce_src="icons/table_multiple-png/coolite.axd" />'; } var cellClick = function(grid, rowIndex, columnIndex, e) { var t = e.getTarget(); var record = grid.getStore().getAt(rowIndex); // Get the Record var columnId = grid.getColumnModel().getColumnId(columnIndex); // Get column id if (t.className == 'imgEdit' && columnId == 'Details') { var Win = new parent.window.Ext.Window({ id:"tmpWin", width: 660, modal:true, height: 350, title: "编辑页面", layout: 'fit', closeAction: 'close', maximizable: false, y:50, autoLoad: { url: "/UserEdit.aspx?id=" + record.data.UserID, mode: "iframe" } , listeners: { // "show": function() { // alert("显示"); // }, "hide": function() { <%=Store1.ClientID %>.reload(); }, "close": function() { <%=Store1.ClientID %>.reload(); } //, // maximize: function() { // window.parent.frames["extPanel" + record.data.UserID].location.reload(); // } // close:function(w){ // //关键部分:关闭窗口前先还原,滚动条才不会消失 // w.restore(); // }, // maximize:function(w){ // //关键部分:最大化后需要将窗口重新定位,否则窗口会从最顶端开始最大化 // w.setPosition(document.body.scrollLeft,document.body.scrollTop); // } } }) Win.show(); return true; } //forbidden return false; } var commandHandler = function(command, record) { switch (command) { case "ProductDetail": var url = "/ProductsList.aspx"; var tab = theTag.tabPanel.add({ id: "extPanel" + record.data.UserID, title: record.data.ckName + ' 产品详细 ', closable: true, autoHeight: false, height: 600, autoLoad: { showMask: true, url: url + "?UserID=" + record.data.UserID, mode: "iframe", maskMsg: "Loading" + record.data.Name + '...' } }) theTag.tabPanel.setActiveTab(tab); break; } }, theTag = {}; function getTarget(o) { if (o.TP1 === null) { theTag.tabPanel = parent.window.theTag.tabPanel; } else { theTag.tabPanel = o.TP1; theTag.tabPanel.url = window.location.href; } } function makesure(){ alert('close success'); } // --></mce:script> <ext:ScriptManager ID="ScriptManager1" runat="server" > <Listeners> <DocumentReady Handler="getTarget({TP1:#{TabPanel1}})" /> </Listeners> </ext:ScriptManager> <ext:Store ID="Store1" runat="server" AutoLoad="true" RemoteSort="true" OnRefreshData="Store1_RefreshData" > <Proxy> <ext:DataSourceProxy> </ext:DataSourceProxy> </Proxy> <Reader> <ext:JsonReader ReaderID="UserID"> <Fields> <ext:RecordField Name="UserID" Type="Int" /> <ext:RecordField Name="Name" Type="String" /> <ext:RecordField Name="typeName" Type="String" /> <ext:RecordField Name="RealName" Type="String" /> </Fields> </ext:JsonReader> </Reader> <AutoLoadParams> <ext:Parameter Name="start" Value="0" Mode="Raw"> </ext:Parameter> </AutoLoadParams> <SortInfo Field="UserID" Direction="DESC"></SortInfo> <Listeners> <LoadException Handler="Ext.MessageBox.alert('Load failed', response.statusText);" /> </Listeners> </ext:Store> <ext:TabPanel ID="TabPanel1" EnableTabScroll="true" runat="server" > <Tabs> <ext:Tab runat="server" ID="TabChildPanel1" Title="会员管理" AutoHeight="true" AutoWidth="true" > <Body> <ext:GridPanel ID="GridPanel1" runat="server" StoreID="Store1" AutoScroll="true" StripeRows="true" Collapsible="true" AutoExpandColumn="U_Email" Height="320" ButtonAlign="Left"> <TopBar> <ext:Toolbar ID="Toolbar1" runat="server"> <Items> <ext:ToolbarSpacer ID="ToolbarSpacer1" runat="server" Width="5" /> <ext:Label ID="Label1" runat="server" Text="会员名称:"></ext:Label> <ext:TextField ID="txtUserName" runat="server" Width="150" /> <ext:ToolbarSeparator /> <ext:Label ID="Label2" runat="server" Text="会员昵称:"></ext:Label> <ext:TextField ID="txtU_NickName" runat="server" Width="150" /> <ext:ToolbarSeparator /> <ext:ComboBox ID="ComboBoxT_Type" runat="server" Editable="false" TypeAhead="true" Mode="Local" ForceSelection="true" TriggerAction="All" SelectOnFocus="true" Width="150" EmptyText="请选择会员类型"> </ext:ComboBox> <ext:ToolbarSeparator /> <ext:ComboBox ID="ComboBoxLevel" runat="server" Editable="false" TypeAhead="true" Mode="Local" ForceSelection="true" TriggerAction="All" SelectOnFocus="true" Width="150" EmptyText="请选择会员等级"> </ext:ComboBox> <ext:Button ID="btnSearch" runat="server" > <AjaxEvents> <Click OnEvent="btnSearch_Click"> <EventMask ShowMask="true" /> </Click> </AjaxEvents> </ext:Button> </Items> </ext:Toolbar> </TopBar> <ColumnModel ID="ColumnModel2" runat="server"> <Columns> <ext:Column ColumnID="UserID" Header="UserID" Hidden="true" DataIndex="UserID" Align="Center" Sortable="true" > </ext:Column> <ext:Column ColumnID="Name" Header="昵称" DataIndex="U_NickName" Align="Center" Sortable="true" > </ext:Column> <ext:Column ColumnID="RealName" Header="真实姓名" DataIndex="U_RealName" Align="Center"> </ext:Column> <ext:CommandColumn Header="产品详细"> <Commands> <ext:GridCommand Icon="ApplicationGo" CommandName="ProductDetail" Text="查看产品" /> </Commands> </ext:CommandColumn> <ext:Column ColumnID="Details" Header="编辑" DataIndex="UserID" Width="50" Align="Center" Fixed="true" MenuDisabled="true" Resizable="false"> <Renderer Fn="DetailsRender" /> </ext:Column> </Columns> </ColumnModel> <LoadMask ShowMask="true" /> <BottomBar> <ext:PagingToolbar ID="PagingToolBar1" runat="server" PageSize="10" StoreID="Store1" /> </BottomBar> <Listeners> <Command Fn="commandHandler" Delay="20" /> <CellClick Fn="cellClick" /> </Listeners> <AjaxEvents> <CellClick OnEvent="ShowDetails" Failure="Ext.MessageBox.alert('Load failed', 'Error during ajax event!');"> <EventMask ShowMask="true" Target="CustomTarget" CustomTarget="={#{GridPanel1}.body}" /> <ExtraParams> <ext:Parameter Name="id" Value="params[0].getStore().getAt(params[1]).id" Mode="Raw" /> </ExtraParams> </CellClick> </AjaxEvents> </ext:GridPanel> </Body> </ext:Tab> </Tabs> </ext:TabPanel> cs int Level = -1; int startIndex = 0; int endIndex = 0; int orderType = 1; /// <summary> /// 绑定列表 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Store1_RefreshData(object sender, StoreRefreshDataEventArgs e) { startIndex = e.Start + 1; endIndex = e.Start + PagingToolBar1.PageSize; if (e.Dir == Coolite.Ext.Web.SortDirection.ASC) { orderType = 0; } if (txtUserName.Text.Trim() != "") { userName = txtUserName.Text.Trim(); } if (txtName.Text.Trim() != "") { Name = txtU_NickName.Text.Trim(); } e.TotalCount = User.GetListCount(userName,Name,Type,Level); DataSet ds = b_T_ITIMS_User.GetList(userName, Name, Type,Level, e.Sort, startIndex, endIndex, orderType); Store1.DataSource = ds; Store1.DataBind(); } /// <summary> /// 搜索方法 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnSearch_Click(object sender, AjaxEventArgs e) { this.PagingToolBar1.PageIndex = 1; Store1.DataBind(); } /// <summary> /// 删除方法 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnDelete_Click(object sender, AjaxEventArgs e) { RowSelectionModel sm = this.GridPanel1.SelectionModel.Primary as RowSelectionModel; if (sm.SelectedRows.Count == 0) { InitCooliteControl.Message.ShowSelectDeleteRow(); return; } bool result = true; foreach (SelectedRow row in sm.SelectedRows) { result = result & _User.Delete(Convert.ToInt32(row.RecordID)); } if (result) { sm.ClearSelections(); InitCooliteControl.Message.ShowDeleteSucceed(); } else { InitCooliteControl.Message.ShowDeleteListFailure(); } Store1.DataBind(); }