<a href="http://webabcd.blog.51cto.com/1787395/345566" target="_blank">上接>></a>
6、重寫OnPreRender方法,注冊上面那段用戶端腳本
/// <summary>
/// OnPreRender
/// </summary>
/// <param name="e"></param>
protected override void OnPreRender(EventArgs e)
{
if (ContextMenus.Count > 0)
{
StringBuilder sb = new StringBuilder();
foreach (ContextMenu cm in ContextMenus)
{
// item = new contextItem("", "", "", "", "", "");
// 1-菜單項的文本
// 2-圖示連結
// 3-所調用的指令按鈕的ID
// 4-連結位址
// 5-連結的target
// 6-右鍵菜單的項的類别
// 指令按鈕
if (cm.ItemType == ContextMenu.ItemTypeCollection.Command)
{
sb.Append("item = new contextItem(\"" + cm.Text +
"\", \"" + ResolveUrl(cm.Icon) + "\", \"" +
cm.CommandButtonId + "\", \"\", \"\", \"Command\");");
}
// 連結
else if (cm.ItemType == ContextMenu.ItemTypeCollection.Link)
"\", \"" + ResolveUrl(cm.Icon) + "\", \"\", \"" +
cm.NavigateUrl + "\", \"" +
cm.Target + "\", \"Link\");");
// 分隔線
else if (cm.ItemType == ContextMenu.ItemTypeCollection.Separator)
sb.Append("item = new contextItem(\"\", \"\", \"\", \"\", \"\", \"Separator\");");
sb.Append("myMenu.addItem(item);");
}
// 注冊用戶端代碼
if (!Page.ClientScript.IsClientScriptBlockRegistered("jsContextMenu"))
Page.ClientScript.RegisterClientScriptBlock(
this.GetType(),
"jsContextMenu", JavaScriptConstant.jsContextMenu.Replace("[$MakeMenu$]", sb.ToString())
);
}
base.OnPreRender(e);
}
7、重寫OnRowDataBound給資料行增加用戶端代碼以調用我們注冊的那段javascript,進而實作給GridView的資料行增加右鍵菜單的功能。
/// OnRowDataBound
protected override void OnRowDataBound(GridViewRowEventArgs e)
if (e.Row.RowType == DataControlRowType.DataRow)
if (ContextMenus.Count > 0)
// 給資料行增加用戶端代碼
e.Row.Attributes.Add("oncontextmenu", "showMenu('" + e.Row.ClientID + "');return false;");
base.OnRowDataBound(e);
控件使用
添加這個控件到工具箱裡,然後拖拽到webform上,設定如下屬性:ItemType為右鍵菜單的項的類别(Link,Command,Separator);Icon為文字左邊的圖示的連結;Text為菜單的文字;CommandButtonId為所調用的指令按鈕的ID;NavigateUrl為連結的url;Target為連結的target(Blank,Self,Top)
ObjData.cs
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.ComponentModel;
/// OjbData 的摘要說明
/// </summary>
public class OjbData
{
public OjbData()
{
//
// TODO: 在此處添加構造函數邏輯
}
[DataObjectMethod(DataObjectMethodType.Select, true)]
public DataTable Select()
DataTable dt = new DataTable();
dt.Columns.Add("no", typeof(string));
dt.Columns.Add("name", typeof(string));
for (int i = 0; i < 30; i++)
DataRow dr = dt.NewRow();
dr[0] = "no" + i.ToString().PadLeft(2, '0');
dr[1] = "name" + i.ToString().PadLeft(2, '0');
dt.Rows.Add(dr);
}
return dt;
}
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>SmartGridView測試</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<yyc:SmartGridView ID="SmartGridView1" runat="server" DataSourceID="ObjectDataSource1"
AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="no" HeaderText="序号" SortExpression="no" ItemStyle-Width="100px" />
<asp:BoundField DataField="name" HeaderText="名稱" SortExpression="name" ItemStyle-Width="100px" />
<asp:TemplateField>
<footerstyle cssclass="hidden" />
<headerstyle cssclass="hidden" />
<itemstyle cssclass="hidden" />
<itemtemplate>
<asp:Button id="btnRightMenuButton" runat="server" CommandName="RightMenuButton" CommandArgument='<%# Container.DataItemIndex %>' />
</itemtemplate>
</asp:TemplateField>
</Columns>
<ContextMenus>
<yyc:ContextMenu ItemType="Command" Text="右鍵菜單按鈕測試" Icon="~/Images/button.gif" CommandButtonId="btnRightMenuButton" />
<yyc:ContextMenu ItemType="Separator" />
<yyc:ContextMenu ItemType="Link" Text="控件源代碼" Icon="~/Images/button.gif" NavigateUrl="http://webabcd.cnblogs.com"
Target="Blank" />
</ContextMenus>
</yyc:SmartGridView>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="Select"
TypeName="OjbData"></asp:ObjectDataSource>
</div>
</form>
</body>
</html>
注:如果想修改右鍵菜單的樣式,請自行修改javascript,我就不把他們弄出來了。
/*測試版的實作 結束*/
OK
本文轉自webabcd 51CTO部落格,原文連結:http://blog.51cto.com/webabcd/345549,如需轉載請自行聯系原作者