您的位置:首页 > 其它

[Ext.Net] 开发学习—2011 结束迎接2012

2012-09-25 16:45 363 查看

ext.net 开发学习—2011 结束迎接2012

闲聊

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

问:“一年大概回家几次” 。答曰:“我家离上海还好,四小时车程,一般一年3次,五一、十一、过年。”

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

朋友后来说:“假如我们的父母还能活40年,每年回家一两次,那么我们和父母在一起的次数就是在倒计时……”。心里不由得有点难过!

快过年了,大家都在忙……希望能抽出时间的还是回家陪陪家人。挣钱的机会相对还很长。除了工作、事业。我们还有家!还有爱……

在这也给园子里面的朋友拜个早年,愿大家来年工资多多,开心多多!

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

  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>


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

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”
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: