ext.net 開發學習—2011 結束迎接2012


閑聊


某日和以好友聊天,問道“什么時候回家過年” 。答曰:“不急,什么時候放假,什么時候回家……” 

                         問:“一年大概回家幾次” 。答曰:“我家離上海還好,四小時車程,一般一年3次,五一、十一、過年。”

朋友是西安的,一般一年回家一次

 

朋友后來說:“假如我們的父母還能活40年,每年回家一兩次,那么我們和父母在一起的次數就是在倒計時……”。心里不由得有點難過!

 

快過年了,大家都在忙……希望能抽出時間的還是回家陪陪家人。掙錢的機會相對還很長。除了工作、事業。我們還有家!還有愛……


在這也給園子里面的朋友拜個早年,願大家來年工資多多,開心多多!

 

 

 

 

Ext.Net2011年第四季度使用小結

 

  11年最后一個季度,我們接觸了Ext.Net。雖說是眾說紛紜……但是 我是站在肯定這邊的!存在即合理


一些日常整理,也是作為11年的小結。11年雖不是完美。但是計划還是完成了……未來的生活還是美好的 12年 繼續努力 


平時整理在Word里面,現直接貼上


1、顯示或隱藏滾動條:

bodyStyle :'overflow-x:visible;overflow-y:scroll',

 

 

2TabPanel:渲染(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); "

 

 

4GridView做保存時注意

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>

        

 

6GridPanel 一對多

 

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();

 

 

9TreePanel 選中子其所有父節點默認選中

 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 操作

View Code
 <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

 

 

12TreePanel選擇

 //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 + ")";//關閉

 

 

 

13TreePanel添加新節點后自動刷新加載

效果圖:


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、控件重置

TextFieldtxtName.reset();

ComboBoxcmbClassType.clearValue() ;|| cmbClassType. reset () ;

 

 

15TabPanel 設置指定的Panel激活

tpnlSouth.setActiveTab(pnlCustFollow);

// tpnlSouthTabPanel IDpnlCustFollowTabPanel中的Panel

  后台代碼亦可以實現,但是效果有時不行

 

 

16GridPanel 操作“保存並繼續” 選擇行選中下一條記錄並加載相關信息


 

代碼:

<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 );//
取消從startrowendrow的記錄的選擇狀態  
  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/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM