某日和以好友聊天,問道“什么時候回家過年” 。答曰:“不急,什么時候放假,什么時候回家……”
問:“一年大概回家幾次” 。答曰:“我家離上海還好,四小時車程,一般一年3次,五一、十一、過年。”
朋友是西安的,一般一年回家一次
朋友后來說:“假如我們的父母還能活40年,每年回家一兩次,那么我們和父母在一起的次數就是在倒計時……”。心里不由得有點難過!
快過年了,大家都在忙……希望能抽出時間的還是回家陪陪家人。掙錢的機會相對還很長。除了工作、事業。我們還有家!還有愛……
在這也給園子里面的朋友拜個早年,願大家來年工資多多,開心多多!
11年最后一個季度,我們接觸了Ext.Net。雖說是眾說紛紜……但是 我是站在肯定這邊的!存在即合理
一些日常整理,也是作為11年的小結。11年雖不是完美。但是計划還是完成了……未來的生活還是美好的 12年 繼續努力
平時整理在Word里面,現直接貼上
1、顯示或隱藏滾動條:
bodyStyle :'overflow-x:visible;overflow-y:scroll',
2、TabPanel:渲染(DeferredRender)默認true
true:表示TabPanel中的Panel只有切換時只觸發當前Panel中的控件,
false:表示 一次性觸發全部Panel中的所有控件
3、事件取消,控件不做處理還原到初始加載頁面
Button.Listeners.Click.Handler ="var ptab = parent.window.父窗口ID; var tab = ptab.getActiveTab();tab.reload(true); "
4、GridView做保存時注意
Button.Listeners.Click.Handler = "Ext.net.DirectMethods.TopBarClick();gp2.save();";
TopBarClick:提交按鈕,gp2 Store ID
5、打開頁面
<script type="text/javascript">
var addTab = function(id, url, name) {
var data = "", Fid = "";
//雙擊GridPanel 行打開 新頁面
var gsm = gpProduct.getSelectionModel();//GridPanel ID
var rows = gsm.getSelections();
if (rows.length > 0 || id == "idNewDetails") {// id == "idNewDetails" 新建
for (var i = 0; i < rows.length; i++) {
var row = rows[i];
data = row.get('ItemNo'); //ScNo 要取值的列名
Fid = ""; //row.get('FID');
}
//一般打開新頁面
var ptab = parent.parent.window.CenterPanel; //父窗口tabPanel
var tab = ptab.getComponent(id);
var tid = id + (new Date()).valueOf();
if (ptab.items.getCount() < 16) {//控制最多可以打開的頁面 15個
if (!tab) {
tab = ptab.add({
id: tid,
title: id == "idNewDetails" ? name : "商品編號" + data,
closable: true,
autoLoad: {
showMask: true,
url: url + (id == "idNewDetails" ? "?TabID=" + tid : "?ItemNo=" + data) + "&Fid=" + Fid,
mode: "iframe",
maskMsg: "Loading " + (id == "idNewDetails" ? name : ("商品編號" + data)) + "..."
}
});
ptab.setActiveTab(tab);
}
else {
ptab.setActiveTab(tab);
}
} else {
Ext.MessageBox.alert('提示', '最多支持同時打開15個窗口,</br>請關閉不使用的窗口.');
}
}
}
</script>
6、GridPanel 一對多
主GridPanel:
<SelectionModel>
<ext:RowSelectionModel runat="server" SingleSelect="true">
<Listeners>
<RowSelect Handler="if (#{pnlPicture}.isVisible()) {#{stPicture}.reload();}
if (#{pnlBom}.isVisible()) {#{stBom}.reload();}
if (#{pnlCustom}.isVisible()){#{stCustom}.reload();}
if (#{pnlPack}.isVisible()){#{stPack}.reload();}" Buffer="100" />
</Listeners>
</ext:RowSelectionModel>
</SelectionModel>
多個次GridPanel
pnlBom:次GridPanel的外Panel
stBom:次GridPanel的數據源Store
次GridPanel:
<ext:Panel ID="pnlBom" AutoHeight="true" runat="server" Title="BOM" Border="false">
<Items>
<ext:GridPanel ID="gpBom" runat="server" StripeRows="true" TrackMouseOver="true"
StoreID="stBom" Height="270">
<ColumnModel runat="server">
<Columns>
<ext:RowNumbererColumn />
</Columns>
</ColumnModel>
<SelectionModel>
<ext:RowSelectionModel runat="server" SingleSelect="true" />
</SelectionModel>
<Listeners>
<Expand Handler="#{stBom}.reload();" />
</Listeners>
<LoadMask ShowMask="true" />
</ext:GridPanel>
</Items>
<Listeners>
<Activate Handler="#{stBom}.reload();" />
</Listeners>
</ext:Panel>
<%--次GridPanel 數據源BOM--%>
<ext:Store runat="server" ID="stBom" AutoLoad="true" ShowWarningOnFailure="false"
OnRefreshData="stBom_Refresh" SkipIdForNewRecords="false" RefreshAfterSaving="Always">
<Reader>
<ext:JsonReader>
<Fields>
<ext:RecordField Name="Term" Type="String" />
</Fields>
</ext:JsonReader>
</Reader>
<BaseParams>
<ext:Parameter Name="ItemNo" Value="Ext.getCmp('#{gpProduct}') && #{gpProduct}.getSelectionModel().hasSelection() ? #{gpProduct}.getSelectionModel().getSelected().id : -1"
Mode="Raw" />
</BaseParams>
<Listeners>
<LoadException Handler="Ext.Msg.alert('加載失敗', e.message || response.statusText);" />
</Listeners>
</ext:Store>
7、 TabPanel 右鍵關閉窗口默認是英文修改方法
<ext:TabPanel ID="CenterPanel" runat="server" ActiveTabIndex="0" EnableTabScroll="true">
<Plugins>
<ext:TabCloseMenu ID="TabCloseMenu1" CloseAllTabsText="關閉全部標簽" CloseOtherTabsText="關閉其他標簽" CloseTabText="關閉當前標簽" runat="server">
</ext:TabCloseMenu>
</Plugins>
</ext:TabPanel>
8 、Confirm 刪除新增確認 根據Ext.net 官網 做了修改
X.Msg.Confirm("提示", "刪除將無法恢復是否確認刪除?", new MessageBoxButtonsConfig
{
Yes = new MessageBoxButtonConfig
{
Handler = "Ext.net.DirectMethods.Yes()",
Text = "確認"
},
No = new MessageBoxButtonConfig
{
Handler = "Ext.net.DirectMethods.No()",
Text = "取消"
}
}).Show();
9、TreePanel 選中子其所有父節點默認選中
modNode.Listeners.CheckChange.Handler = "nodeChecked(node);";//modNode 你的TreeNode 主鍵ID
<script type="text/javascript" language="javascript">
function nodeChecked(node) {
//如果有父結點則選中父結點
if (node.attributes.checked) {
if (node.parentNode.getUI().checkbox != undefined) {
node.parentNode.getUI().checkbox.checked = true;
node.parentNode.attributes.checked = true;
if (node.parentNode.parentNode != null) {
nodeChecked(node.parentNode);
}
}
}
//如果有子結點則全取消選中
if (node.hasChildNodes() && !node.attributes.checked) {
node.eachChild(function(node) {
node.getUI().checkbox.checked = false;
node.attributes.checked = false;
if (node.hasChildNodes()) {
nodeChecked(node);
}
});
}
}
</script>
10、獲取TreePanel下所有子節點
var nodevalue = tplNode; //TreePanel Id
function getAllRoot(value) {
var rootNode = value.getRootNode(); //獲取根節點
findchildnode(rootNode); //開始遞歸
nodevalue = temp.join(",");
alert(nodevalue);
return nodevalue;
}
var temp = [];
//獲取所有的子節點
function findchildnode(node) {
var childnodes = node.childNodes;
Ext.each(childnodes, function() { //從節點中取出子節點依次遍歷
var nd = this;
temp.push(nd.id);
if (nd.hasChildNodes()) { //判斷子節點下是否存在子節點
findchildnode(nd); //如果存在子節點 遞歸
}
});
}
選中復選框級聯選擇
//Begin 選中復選框級聯選擇
function nodeChecked(node) {
//如果有父結點則選中父結點
if (node.attributes.checked) {
if (node.parentNode.getUI().checkbox != undefined) {
node.parentNode.getUI().checkbox.checked = true;
node.parentNode.attributes.checked = true;
if (node.parentNode.parentNode != null) {
nodeChecked(node.parentNode);
}
}
}
//如果有子結點則全取消選中
if (node.hasChildNodes() && !node.attributes.checked) {
node.eachChild(function(node) {
node.getUI().checkbox.checked = false;
node.attributes.checked = false;
node.getUI()[node.attributes.checked ? 'addClass' : 'removeClass']('complete');
if (node.hasChildNodes()) {
nodeChecked(node);
}
});
}
node.getUI()[node.attributes.checked ? 'addClass' : 'removeClass']('complete');
}
//End
效果
附加貼出Tree 操作

<script type="text/javascript" language="javascript">
//Begin 權限分配
var DisFunction = function() {
//var gsm = gpAdmin.getSelectionModel();
//var rows = gsm.getSelections();
var varSeq = hidRoleId.getValue(); //角色主鍵
if (varSeq == "") {
alert("請選擇您要分配的角色名稱!");
return;
}
var msg = "",
selNodes = tpnlDisFunction.getChecked();
Ext.each(selNodes, function(node) {
if (msg.length > 0) {
msg += ", ";
}
msg += node.id;
});
if (msg.length > 0) {
var nodeList; //獲取TreePanel下所有treeNode
if (hdNodeList.getValue() == "") {
nodeList = getAllRoot(tpnlDisFunction);
hdNodeList.setValue(nodeList);
}
else {
nodeList = hdNodeList.getValue();
}
Ext.net.DirectMethods.DisFunctions(varSeq, msg, nodeList);
}
else {
Ext.Msg.show({
title: "提示",
msg: "請選擇您要分配的功能",
icon: Ext.Msg.INFO,
minWidth: 200,
buttons: Ext.Msg.OK
});
}
};
//End
//Begin 單擊選擇角色 綁定其角色功能
function RoleSelelct(id) {
var nodeList; //獲取TreePanel下所有treeNode
if (hdNodeList.getValue() == "") {
nodeList = getAllRoot(tpnlDisFunction);
hdNodeList.setValue(nodeList);
}
else {
nodeList = hdNodeList.getValue();
}
Ext.net.DirectMethods.GetRoleFunList(id + "|" + nodeList, {
success: function(result) {
ClearRoot(tpnlDisFunction);
for (var i = 0; i < result.split(',').length; i++) {
if (nodeList.indexOf(result.split(',')[i]) != -1) {
var node = tpnlDisFunction.getNodeById(result.split(',')[i]);
if (node != undefined) {
node.getUI().checkbox.checked = true;
node.attributes.checked = true;
node.getUI()[node.attributes.checked ? 'addClass' : 'removeClass']('complete');
}
}
}
},
failure: function(result) {
alert(result);
}
});
}
//End
//Begin 根據Id 獲取所有節點
function getAllRoot(value) {
var nodevalue = ""; //保存節點的id或值
var rootNode = value.getRootNode(); //獲取根節點
findchildnode(rootNode); //開始遞歸
nodevalue = temp.join(",");
//alert(nodevalue);
return nodevalue;
}
var temp = [];
//獲取所有的子節點
function findchildnode(node) {
var childnodes = node.childNodes;
Ext.each(childnodes, function() { //從節點中取出子節點依次遍歷
var nd = this;
temp.push(nd.id);
if (nd.hasChildNodes()) { //判斷子節點下是否存在子節點
findchildnode(nd); //如果存在子節點 遞歸
}
});
}
//End
//Begin清除checkbox選中狀態
function ClearRoot(value) {
var rootNode = value.getRootNode(); //獲取根節點
clearChildNode(rootNode); //開始遞歸
}
function clearChildNode(node) {
var childnodes = node.childNodes;
Ext.each(childnodes, function() { //從節點中取出子節點依次遍歷
var nd = this;
nd.getUI().checkbox.checked = false;
nd.attributes.checked = false;
nd.getUI()[nd.attributes.checked ? 'addClass' : 'removeClass']('complete');
if (nd.hasChildNodes()) { //判斷子節點下是否存在子節點
clearChildNode(nd); //如果存在子節點 遞歸
}
});
}
//End
//Begin 選中復選框級聯選擇
function nodeChecked(node) {
//如果有父結點則選中父結點
if (node.attributes.checked) {
if (node.parentNode.getUI().checkbox != undefined) {
node.parentNode.getUI().checkbox.checked = true;
node.parentNode.attributes.checked = true;
if (node.parentNode.parentNode != null) {
nodeChecked(node.parentNode);
}
}
}
//如果有子結點則全取消選中
if (node.hasChildNodes() && !node.attributes.checked) {
node.eachChild(function(node) {
node.getUI().checkbox.checked = false;
node.attributes.checked = false;
node.getUI()[node.attributes.checked ? 'addClass' : 'removeClass']('complete');
if (node.hasChildNodes()) {
nodeChecked(node);
}
});
}
node.getUI()[node.attributes.checked ? 'addClass' : 'removeClass']('complete');
}
//End
</script>
11、默認選中第一行:
gpAdmin.getSelectionModel().selectFirstRow();// GridPanel ID
12、TreePanel選擇
//Begin 樹型選擇賦值
//樹Click選擇賦值
function SelectNode(node, conId, winId) {
conId.setValue(node.attributes.qtip);
winId.hide();//彈出框
}
//選擇按鈕Click
function btnSltNode(conId, winId) {
var selectionMode = tplMain.getSelectionModel();
var selection = selectionMode.selNode; //獲取選中的值
if (selection == null) {
alert("請選擇");
}
else {
var v = selection.attributes.text;
conId.setValue(v);
winId.hide();
}
}
//關閉
function btnClose(winId) {
winId.hide();
}
//End
后台代碼:
string strHandler = "SelectNode(node," + controlId + "," + winId + ")"; //雙擊選擇
tplMain.Listeners.DblClick.Handler = strHandler; //TreePanel ID
btnSelect.Listeners.Click.Fn = "btnSltNode(" + controlId + "," + winId + ")";//選擇
btnClose.Listeners.Click.Fn = "btnClose(" + winId + ")";//關閉
13、TreePanel添加新節點后自動刷新加載
效果圖:
Html
<ext:TreePanel ID="tplMain" runat="server" Height="500" Width="350" UseArrows="true" AutoScroll="true" Animate="true" EnableDD="true" ContainerScroll="true">
</ext:TreePanel>
<ext:Button ID="btnSubmit" runat="server" Text="確定添加">
<Listeners>
<Click Handler="BtnSubmit(#{tplMain});" />
</Listeners>
</ext:Button>
Js
//Begin 快速添加 自動加載新增字段
function BtnSubmit(tree) {
Ext.net.DirectMethods.Submit({
success: function(result) {
var nodes = eval(result);
tree.root.ui.remove();
tree.initChildren(nodes);
tree.root.render();
tree.el.unmask();
},
failure: function(msg) {
tree.el.unmask();
Ext.Msg.alert('Failure', '未能加載數據');
}
});
}
//End
后台代碼
///<summary>
///快速添加
///</summary>
[DirectMethod]
public string Submit()
{
Ext.Net.TreeNodeCollection nodes = BindTree(“”)
return nodes.ToJson();
}
生成樹方法
private Ext.Net.TreeNodeCollection BindTree(string strFieldId)
{
_dtMouldField = VwMouldField.Query().WHERE(VwMouldField.Columns.FieldFUID, strFieldId).ExecuteDataSet().Tables[0];
//根據字段行信息,獲取該字段所屬數據源信息 樹型節點
DataTable dtSource = App_Code.CreateControl.GetSourceTableBySearchSQL(_dtMouldField.Rows[0]);
if (dtSource == null || dtSource.Rows.Count <= 0)
return null;
Ext.Net.TreeNode root = new Ext.Net.TreeNode() { Text = _dtMouldField.Rows[0]["FieldCaption"].ToString() };
string strFieldCation = _dtMouldField.Rows[0]["FieldCaption"].ToString();
winAdd.Title = strFieldCation;
if (strFieldCation == "國家城市")//快速添加
{
btnAdd.Visible = false;
}
root = CreateNode(dtSource, root, "", _dtMouldField);
root.Draggable = false;
root.Expanded = true;
tplMain.Root.Add(root);
return tplMain.Root;
}
14、控件重置
TextField:txtName.reset();
ComboBox:cmbClassType.clearValue() ;|| cmbClassType. reset () ;
15、TabPanel 設置指定的Panel激活
tpnlSouth.setActiveTab(pnlCustFollow);
// tpnlSouth:TabPanel ID,pnlCustFollow:TabPanel中的Panel
后台代碼亦可以實現,但是效果有時不行
16、GridPanel 操作“保存並繼續” 選擇行選中下一條記錄並加載相關信息
代碼:
<ext:Button ID="btnSaveContinue" Icon="FolderBell" Text="保存並繼續" runat="server"> <Listeners> <Click Handler="FollowContinue()" /> </Listeners> </ext:Button>
Js:大致如下
//跟進 保存並繼續
function FollowContinue() {
var next = gpList.getSelectionModel().selectNext();
Ext.net.DirectMethods.FollowSave(next, {
success: function(result) {
var v = eval("(" + result + ")");
if (v) {
if (next == false) {
alert('已是最后一條數據');
} else {
gpList.getSelectionModel().selectNext(); //選擇下一行 ;
gpList.fireEvent('RowClick'); //激活加載相關信息
}
}
},
failure: function(errorMsg) {
Ext.Msg.alert('Failure', errorMsg);
}
});
}
// gpList:上列表Grid ID,'RowClick'為上列表RowClick事件
<Listeners>
<DblClick Handler="addTab('idClientDetail', 'CustomerManage/ClientDetail.aspx','客戶檔案');" />
<RowClick Handler="if (#{pnlContact}.isVisible()) {#{stContact}.reload();}
if (#{pnlBank}.isVisible()) {#{stBank}.reload();}
if (#{pnlExpress}.isVisible()) {#{stExpress}.reload();}
if (#{pnlFollow}.isVisible()) {#{stFollow}.reload();}"Buffer="100" />
</Listeners>
隨機奉上GridPanel.getSelectionModel下所有操作
1. var model = GridPanel.getSelectionModel(); //獲取選擇行
2. model.selectAll();//選擇所有行
3. model.selectFirstRow();//選擇第一行
4. model.selectLastRow([flag]);//選擇最后一行,flag為正的話保持當前已經選中的行數,不填則默認false
5. model.selectNext();//選擇下一行
6. model.selectPrevious();//選擇上一行
7. model.selectRange(tartRow,ndRow, [Boolean keepExisting] );//選擇范圍間的行
8. model.selectRow(row);//選擇某一行
9. model.selectRows(rows);//選擇指定一些行,傳遞數組如[1,3,5],則分別選擇1,3,5行
10. model.clearSelections();//清空所有選擇
11. model.deselectRange( startRow, endRow );//取消從startrow到endrow的記錄的選擇狀態
12. model.deselectRow(row);//取消指定行的記錄
13.model.lastActive;//當前選中的行號,當前激活的行
17、新建Panel頁面,控件操作完成后Panel標題Title隨之更改
效果:
源碼:
//提交成功 Panel更名
string panelid = Request.QueryString["TabID"];
if (!string.IsNullOrEmpty(panelid))
X.AddScript("var panelt = parent.window.CenterPanel.getItem('" + panelid + "');panelt.setTitle('" + Request.Form["txtCustID"] + "');");
注:
TabID:新建頁面,主頁面傳遞過來的ID(即當前Panel主鍵ID)
涉及到父窗口,子窗口時別忘了“parent”
作者:PEPE
出處:http://pepe.cnblogs.com/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。