基于FineUI Grid控件添加右键菜单

FineUI官方Demo上一直没有Grid右键菜单的实现,其实从4.1.x的版本开始,允许添加自定义的事件监听(Listeners),所以要实现这个功能已经相当容易了。

ExtJs右键菜单有很多种,对于Grid控件来说,我这里只简单说明两种实现。即在表格的数据行上右键单击时弹出的菜单,以及在空白位置右键单击时弹出的菜单。

时间有限,废话不多说了,先看两个效果图。(实现环境 FineUI4.1.6,.NET 4.0因为需要指定控件的ID)

1. 数据行右键菜单

2. 空白处右键菜单

实现方法:

第一步:添加Grid控件。。。不多说了

第二步:往Grid控件后面添加两个Menu控件,分别对应要实现的两个右键菜单,要指定ClientIDMode为Static,Hidden为true

<f:Menu ID="containerMenu" runat="server" ClientIDMode="Static" Hidden="true">
 <f:MenuButton Icon="Add" Text="添加" OnClick="OnAddClick"></f:MenuButton>
 <f:MenuSeparator />
 <f:MenuButton Icon="Reload" Text="刷新"></f:MenuButton>
 </f:Menu>
 <f:Menu ID="itemMenu" runat="server" ClientIDMode="Static" Hidden="true">
 <f:MenuButton Icon="Pencil" Text="修改" OnClick="OnEditClick"></f:MenuButton>
 <f:MenuButton Icon="Delete" Text="删除"></f:MenuButton>
 <f:MenuSeparator />
 <f:MenuButton Icon="Reload" Text="刷新"></f:MenuButton>
 </f:Menu>

第三步:为Grid添加事件“containercontextmenu”,“itemcontextmenu”事件监听

 <f:Grid ID="Grid1" runat="server" Title="FineUI Grid右键菜单Demo" CssStyle="margin: 10px;" AllowPaging="true" PageSize="20"
 EnableHeaderMenu="false" EnableColumnLines="true" DataKeyNames="ID" >
 <Columns>
 .....省略
 </Columns>
 <Listeners>
 <f:Listener Event="containercontextmenu" Handler="function (grid, e, eOpts) { e.stopEvent(); F('containerMenu').showAt(e.getXY()); }" />
 <f:Listener Event="itemcontextmenu" Handler="function (grid, record, item, index, e, eOpts) { e.stopEvent(); F('itemMenu').showAt(e.getXY()); }" />
 </Listeners>
 </f:Grid> 

这两个事件属于ExtJs的GridPanel控件,参数说明如下:

containercontextmenu:grid:表格对象,e:事件对象,eOpts:事件对象参数;

itemcontextmenu:grid:表格对象,record:选择的行对像(可以通过record.rawData属性获得所选行的全部数据),item:html元素对象,index:行索引,e:事件对象,eOpts:事件对象参数;

如有其它想了解的地方,请去翻查ExtJs的Api doc http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.grid.Panel

一般情况下,照抄上面的代码就Ok了,除非你对事件处理函数有更多的要求。

第四步:实现菜单功能。按照正常的方法绑定菜单按钮的事件就可以了,没什么需要特别说明的

在第二步的代码里可以看到,已经为添加和修改按钮添加了服务端OnClick事件绑定。下面看一下后台代码的实现

 protected void OnAddClick(object sender, EventArgs e)
 {
 FineUI.Alert.Show("Add Click!", FineUI.MessageBoxIcon.Information);
 }
 protected void OnEditClick(object sender, EventArgs e)
 {
 var selectedrow = Grid1.Rows[Grid1.SelectedRowIndex].DataKeys[0].ToString();
 FineUI.Alert.Show(string.Format("修改ID为{0}的记录", selectedrow), FineUI.MessageBoxIcon.Warning);
 }

如何使用FineUI Grid控件,添加分页功能,然后高度填充整个页面。具体请看下面文字说明和代码分析。

使用FineUI 控件的每个页面都有一个f:PageManager控件,它包含属性:AutoSizePanelID,设置需要填充的控件ID,从它的demo可以看出,正常情况下需要再放置一个容器Panel,就可以使整个页面填充。

<f:PageManager ID="PageManager1" runat="server" AutoSizePanelID="ResultSetGrid" />
<f:Grid ID="ResultSetGrid" runat="server" EnableCheckBoxSelect="true" Title="" DataKeyNames="ID"
 ShowBorder="false"
 PageSize="3"
 AllowPaging="true"
 IsDatabasePaging="true"
 OnPageIndexChange="ResultSetGrid_PageIndexChange"
 OnSort="ResultSetGrid_Sort"
 AllowSorting="true"
 SortField="ID">
 <Toolbars>
 <f:Toolbar ID="ResultSetGrid_Toolbar" runat="server">
  <Items>
  <f:Button ID="btnAdd" runat="server" Text="添加" OnClientClick="Add();" EnablePostBack="false" Icon="ApplicationAdd"></f:Button>
  <f:Button ID="btnEdit" runat="server" Text="编辑" EnableAjax="true" OnClick="btnEdit_Click" Icon="ApplicationEdit"></f:Button>
  <f:Button ID="btnDelete" runat="server" Text="删除" OnClick="btnDelete_Click" Icon="ApplicationDelete"></f:Button>
  <f:Button ID="btnImport" runat="server" OnClientClick="Import();" Text="数据采集" Icon="ApplicationLink"></f:Button>
  <f:Button ID="btnSelf" runat="server" OnClientClick="Filter();" Text="自定义筛选" Icon="ApplicationKey"></f:Button>
  </Items>
 </f:Toolbar>
 </Toolbars>
 <Columns>
 <f:RowNumberField EnablePagingNumber="true" />
 </Columns>
 </f:Grid>

以上内容是基于FineUI Grid控件添加右键菜单的全部叙述,希望对大家有所帮助。

(0)

相关推荐

  • Jquery简单实现GridView行高亮的方法

    本文实例讲述了Jquery简单实现GridView行高亮的方法.分享给大家供大家参考.具体实现方法如下: $("#gridID tr:not(tr:last-child)").filter(function () { return $('td', this).length && !('table', this).length }).hover(function () { $(this).toggleClass('hover_css'); }); 希望本文所述对大家的jQ

  • IE10中flexigrid无法显示数据的解决方法

    在其他浏览器是好的,IE10浏览器却不能够显示数据,并且也没有报任何错误. 将代码修改如下就好了: 原来代码: $(t).append(tbody); 修改后代码: 复制代码 代码如下: $(t).append('<table cellpadding=0 cellspacing=0>'+tbody.outerHTML + '</table>'); 当然代码情况可能各种各样,这仅作一种思路参考. 以上所述就是本文的全部内容了,希望大家能够喜欢.

  • js禁止页面复制功能禁用页面右键菜单示例代码

    <body oncontextmenu="return false">禁用网页右键菜单,但是仍然可以使用快捷键复制. js代码禁用复制功能: 复制代码 代码如下: <script type="text/javascript"> document.body.onselectstart=document.body.oncontextmenu=function(){ return false;} </script> 注意这段代码必须放在

  • C#中GridView动态添加列的实现方法

    本文实例讲述了C#中GridView动态添加列的实现方法.分享给大家供大家参考.具体如下: protected void Page_Load(object sender, EventArgs e) { TemplateField mycustomField = new TemplateField(); //创建列实例 mycustomField.ShowHeader = true; // 设置属性 LinkButton lb = new LinkButton(); lb.Text = "Dele

  • C#自定义控件添加右键菜单的方法

    C#自定义控件添加右键菜单非常简单,主要用到控件,像control定义右键菜单,用items.add()叠加右键菜单内容,用click事件处理函数. 1.control是要定义右键菜单的控件. private void control_MouseDown(object sender, MouseEventArgs e) {    if (e.Button == MouseButtons.Right)    {        ContextMenu menu = new rightClickMen

  • ASP.NET中为GridView添加删除提示框的方法

    本文实例讲述了ASP.NET中为GridView添加删除提示框的方法.分享给大家供大家参考.具体分析如下: 在GridView中我们可以直接添加一个CommandField删除列来删除某行信息.但为了避免误操作引起的误删除,在删除操作者让操作者再确认下,完后再进行删除. 首先我们给我们的GridView 添加一个模板列,如下: 以下是引用片段: <ASP:TemplateField HeaderText="Delete" ShowHeader="False"&

  • dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法

    在以前的一个公司内部管理系统(InnerOA)中,对于目录树的构造我采用的是dTree,实现无限级目录显示及右键菜单功能(右键菜单中包括:新建.修改.共享.删除.刷新等功能,如下图所示) 关于公司内部管理系统(InnerOA)中目录树的一些知识以后有时间将整理并提供源码. 但是dTree唯一遗憾的是不支持拖拽排序功能,这让我在完成InnerOA之后心里一直纠结的问题.在网上查看关于目录树的一些内容,dTree是我目前认为最符合我项目的一个.在一个偶然机会,发现了另一个强大的目录树,也就是本文所说

  • Android GridView实现滚动到指定位置的方法

    当一个列表项目很多,并且每个项目可以进入到其它Activity或者Fragment时,保存之前列表的位置是一个比较不错的功能, 今天研究了一下怎么保存浏览位置,发现GridView和它的父类中有4个相关的方法: 复制代码 代码如下: public void smoothScrollToPosition (int position) 滚动到position指定的位置,api level 11之下可用 *当你滚动完后,返回列表,能正常滚动,但是你再次从列表的项目返回后,滚动失效,就是只能滚动一次,我

  • chrome扩展学习 右键菜单实现代码

    manifest.json 复制代码 代码如下: { "name": "我的右键", "description": "chrome扩展学习---menu使用", "version": "0.1", "permissions": ["contextMenus", "tabs"], "background": {

  • 为EasyUI的Tab标签添加右键菜单的方法

    前期的准备工作: 1.下载DEMO源码,并升级为最新版本(jquery 1.7.2,Easyui 1.2.6),直接替换就可以啦,升级easyui 是的要把css js theme 全部替换 2.在首页的HTML代码中:将 复制代码 代码如下: <div id="mm" class="easyui-menu" style="width:150px;"> <div id="mm-tabupdate">刷新

  • C#设置WinForm中DataGrid列的方法(列宽/列标题等)

    本文实例讲述了C#设置WinForm中DataGrid列的方法.分享给大家供大家参考.具体如下: 写winForm的程序,难免要用DataGrid,自然也就需要设置列格式啊,标题之类的!但是经常列标题设置后没反应,好恶心! 这几天做了个程序,自己研究了一下,主要有有一个地方要注意!那就是下面代码中dts.MappingName="Table"; 这段!以下代码不需要在控件上做任何设置,照着写就能搞定! private void frmLog_Load(object sender, Sy

  • JavaScript 对任意元素,自定义右键菜单的实现方法

    一.一些概念: 1.鼠标事件有一个botton属性:返回一个整数,用于表示点击的是哪个鼠标按键. BUG:在IE和标准DOM的鼠标事件中,唯一一个button属性值相同的是"单击右键"事件,都返回2. 2.事件onmousedown:表示鼠标按键按下的动作. 事件oncontextmenu:点击鼠标触发的另一个事件. 3.中断默认事件处理函数的方法:IE中设置returnValue=false;  标准DOM中调用preventDefault()方法. 4.事件对象:①在IE中,事件对

  • Flex自定义右键菜单具体实现

    1.自定义右键菜单注册类: 项目中新增注册类 RightClickManager,代码如下: 复制代码 代码如下: package com.siloon.plugin.rightClick { import flash.display.DisplayObject; import flash.display.InteractiveObject; import flash.events.ContextMenuEvent; import flash.events.MouseEvent; import

随机推荐