天天看點

上接擴充GridView控件(9) - 給資料行增加右鍵菜單

<a href="http://webabcd.blog.51cto.com/1787395/345566" target="_blank">上接&gt;&gt;</a>

6、重寫OnPreRender方法,注冊上面那段用戶端腳本

/// &lt;summary&gt; 

                /// OnPreRender 

                /// &lt;/summary&gt; 

                /// &lt;param name="e"&gt;&lt;/param&gt; 

                protected override void OnPreRender(EventArgs e) 

                { 

                        if (ContextMenus.Count &gt; 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 &gt; 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 的摘要說明 

/// &lt;/summary&gt; 

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 &lt; 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

&lt;%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %&gt; 

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt; 

&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt; 

&lt;head runat="server"&gt; 

        &lt;title&gt;SmartGridView測試&lt;/title&gt; 

&lt;/head&gt; 

&lt;body&gt; 

        &lt;form id="form1" runat="server"&gt; 

                &lt;div&gt; 

                        &lt;yyc:SmartGridView ID="SmartGridView1" runat="server" DataSourceID="ObjectDataSource1" 

                                AutoGenerateColumns="false"&gt; 

                                &lt;Columns&gt; 

                                        &lt;asp:BoundField DataField="no" HeaderText="序号" SortExpression="no" ItemStyle-Width="100px" /&gt; 

                                        &lt;asp:BoundField DataField="name" HeaderText="名稱" SortExpression="name" ItemStyle-Width="100px" /&gt; 

                                        &lt;asp:TemplateField&gt; 

                                                &lt;footerstyle cssclass="hidden" /&gt; 

                                                &lt;headerstyle cssclass="hidden" /&gt; 

                                                &lt;itemstyle cssclass="hidden" /&gt; 

                                                &lt;itemtemplate&gt; 

                                        &lt;asp:Button id="btnRightMenuButton" runat="server" CommandName="RightMenuButton" CommandArgument='&lt;%# Container.DataItemIndex %&gt;' /&gt; 

                                &lt;/itemtemplate&gt; 

                                        &lt;/asp:TemplateField&gt; 

                                &lt;/Columns&gt; 

                                &lt;ContextMenus&gt; 

                                        &lt;yyc:ContextMenu ItemType="Command" Text="右鍵菜單按鈕測試" Icon="~/Images/button.gif" CommandButtonId="btnRightMenuButton" /&gt; 

                                        &lt;yyc:ContextMenu ItemType="Separator" /&gt; 

                                        &lt;yyc:ContextMenu ItemType="Link" Text="控件源代碼" Icon="~/Images/button.gif" NavigateUrl="http://webabcd.cnblogs.com" 

                                                Target="Blank" /&gt; 

                                &lt;/ContextMenus&gt; 

                        &lt;/yyc:SmartGridView&gt; 

                        &lt;asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="Select" 

                                TypeName="OjbData"&gt;&lt;/asp:ObjectDataSource&gt; 

                &lt;/div&gt; 

        &lt;/form&gt; 

&lt;/body&gt; 

&lt;/html&gt;

注:如果想修改右鍵菜單的樣式,請自行修改javascript,我就不把他們弄出來了。

/*測試版的實作 結束*/

OK

     本文轉自webabcd 51CTO部落格,原文連結:http://blog.51cto.com/webabcd/345549,如需轉載請自行聯系原作者

繼續閱讀