欧美三区四区_av先锋影音资源站_亚洲第一论坛sis_影音先锋2020色资源网_亚洲精品社区_在线免费观看av网站_国产一区二区伦理_亚洲欧美视频一区二区_99视频精品全部免费在线_精精国产xxxx视频在线

GridView/DataGrid行單擊和雙擊事件實現代碼_.Net教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:添加GridView/DataGrid單擊一行服務器事件
實現功能: asp.net 的GridView/DataGrid控件本身均支持行選擇事件(通過設置Button/LinkButton.CommandName=Selected,并在SelectedIndexChanged事件中處理)。 然而,有時候我們希望用戶點擊 網頁 上GridView/DataGrid一行中任意位置都可以實現觸發一個

功能: 單擊選中行,雙擊打開詳細頁面 
說明:
單擊事件(onclick)使用了 setTimeout 延遲,根據實際需要修改延遲時間 
當雙擊時,通過全局變量 dbl_click 來取消單擊事件的響應 
常見處理行方式會選擇在 RowDataBound/ItemDataBound 中處理,這里我選擇 Page.Render 中處理,至少基于以下考慮 
1、RowDataBound 僅僅在調用 DataBind 之后才會觸發,回發通過 ViewState 創建空件不觸發 假如需要更多的處理,你需要分開部分邏輯到 RowCreated 等事件中 
2、并且我們希望使用 ClientScript.GetPostBackEventReference 和 ClientScript.RegisterForEventValidation 方法 進行安全腳本的注冊,而后者需要在頁的 Render 階段中才能處理 

.aspx(直接運行)
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>

<%--http://community.csdn.net/Expert/TopicView3.asp?id=5767096--%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack) {
            LoadGridViewProductData();
            LoadDataGridProductData();
        }
    }

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        /* 
         當然可以在這里進行客戶端腳本綁定,
         但是,我選擇在重載頁的 Render 方法中處理,因為
         1. RowDataBound 僅僅在調用 DataBind 之后才會觸發,回發通過 ViewState 創建空件不觸發
            假如需要更多的處理,你需要分開部分邏輯到 RowCreated 等事件中
         2. 并且我們希望使用 
            ClientScript.GetPostBackEventReference 和 ClientScript.RegisterForEventValidation 方法
            進行安全腳本的注冊,而后者需要在頁的 Render 階段中才能處理         
        */
    }   

    protected void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
    {
        // 隱藏輔助按鈕列
        int cellIndex = 0;
        e.Item.Cells[cellIndex].Attributes["style"] = "display:none";
    }   
    
    void LoadGridViewProductData()
    {
        DataTable dt = CreateSampleProductData();

        GridView1.DataSource = dt;
        GridView1.DataBind();    
    }

    void LoadDataGridProductData()
    {
        DataTable dt = CreateSampleProductData();

        DataGrid1.DataSource = dt;
        DataGrid1.DataBind();
    }

    #region sample data

    static DataTable CreateSampleProductData()
    {
        DataTable tbl = new DataTable("Products");

        tbl.Columns.Add("ProductID", typeof(int));
        tbl.Columns.Add("ProductName", typeof(string));        
        tbl.Columns.Add("UnitPrice", typeof(decimal));
        tbl.Columns.Add("CategoryID", typeof(int));

        tbl.Rows.Add(1, "Chai", 18, 1);
        tbl.Rows.Add(2, "Chang", 19, 1);
        tbl.Rows.Add(3, "Aniseed Syrup", 10, 2);
        tbl.Rows.Add(4, "Chef Anton’s Cajun Seasoning", 22, 2);
        tbl.Rows.Add(5, "Chef Anton’s Gumbo Mix", 21.35, 2);
        tbl.Rows.Add(47, "Zaanse koeken", 9.5, 3);
        tbl.Rows.Add(48, "Chocolade", 12.75, 3);
        tbl.Rows.Add(49, "Maxilaku", 20, 3);        

        return tbl;
    }

    #endregion       

    protected override void Render(HtmlTextWriter writer)
    {
        // GridView
        foreach (GridViewRow row in GridView1.Rows) {
            if (row.RowState == DataControlRowState.Edit) { // 編輯狀態
                row.Attributes.Remove("onclick");
                row.Attributes.Remove("ondblclick");
                row.Attributes.Remove("style");
                row.Attributes["title"] = "編輯行";
                continue;
            }
            if (row.RowType == DataControlRowType.DataRow) {
                // 單擊事件,為了響應雙擊事件,需要延遲單擊響應,根據需要可能需要增加延遲
                // 獲取ASP.NET內置回發腳本函數,返回 __doPostBack(<<EventTarget>>, <<EventArgument>>)
                // 可直接硬編碼寫入腳本,不推薦                
                row.Attributes["onclick"] = String.Format("javascript:setTimeout(\"if(dbl_click){{dbl_click=false;}}else{{{0}}};\", 1000*0.3);", ClientScript.GetPostBackEventReference(GridView1, "Select$" + row.RowIndex.ToString(), true));
                // 雙擊,設置 dbl_click=true,以取消單擊響應
                row.Attributes["ondblclick"] = String.Format("javascript:dbl_click=true;window.open(’DummyProductDetail.aspx?productid={0}’);", GridView1.DataKeys[row.RowIndex].Value.ToString());
                //
                row.Attributes["style"] = "cursor:pointer";
                row.Attributes["title"] = "單擊選擇行,雙擊打開詳細頁面";
            }
        }

        // DataGrid
        foreach (DataGridItem item in DataGrid1.Items) {
            if (item.ItemType == ListItemType.EditItem) {
                item.Attributes.Remove("onclick");
                item.Attributes.Remove("ondblclick");
                item.Attributes.Remove("style");
                item.Attributes["title"] = "編輯行";
                continue;
            }
            if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem) {
                //單擊事件,為了響應雙擊事件,延遲 1 s,根據需要可能需要增加延遲
                // 獲取輔助的支持回發按鈕
                // 相對而言, GridView 支持直接將 CommandName 作為 <<EventArgument>> 故不需要輔助按鈕
                Button btnHiddenPostButton = item.FindControl("btnHiddenPostButton") as Button;
                item.Attributes["onclick"] = String.Format("javascript:setTimeout(\"if(dbl_click){{dbl_click=false;}}else{{{0}}};\", 1000*0.3);", ClientScript.GetPostBackEventReference(btnHiddenPostButton, null));                
                // 雙擊
                // 雙擊,設置 dbl_click=true,以取消單擊響應
                item.Attributes["ondblclick"] = String.Format("javascript:dbl_click=true;window.open(’DummyProductDetail.aspx?productid={0}’);", DataGrid1.DataKeys[item.ItemIndex].ToString());
                
                //
                item.Attributes["style"] = "cursor:pointer";
                item.Attributes["title"] = "單擊選擇行,雙擊打開詳細頁面";
            }
        }

        base.Render(writer);
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>ASP.NET DEMO15: GridView 行單擊與雙擊事件2</title>
    <script>
    // 輔助全局變量,指示是否雙擊
    var dbl_click = false;
    </script>    
</head>
<body>
    <form id="form1" runat="server">
    <div>        
        <h3>功能:</h3>
            <li>單擊選中行</li>
            <li>雙擊打開詳細頁面</li>        
        <h3>說明:</h3>
        <ul>
            <li>這是<a href="GridView/DataGrid http://www.cnblogs.com/Jinglecat/archive/2007/09/20/900645.html"> ASP.NET DEMO 15: 同時支持行單擊和雙擊事件</a>的改進版本</li>            
            <li>單擊事件(onclick)使用了 setTimeout 延遲,根據實際需要修改延遲時間</li>
            <li>當雙擊時,通過全局變量 dbl_click 來取消單擊事件的響應</li>
            <li>常見處理行方式會選擇在 RowDataBound/ItemDataBound 中處理,這里我選擇 Page.Render 中處理,至少基于以下考慮
                <li style="padding-left:20px; list-style-type:square">RowDataBound 僅僅在調用 DataBind 之后才會觸發,回發通過 ViewState 創建空件不觸發
            假如需要更多的處理,你需要分開部分邏輯到 RowCreated 等事件中</li> 
                <li style="padding-left:20px; list-style-type:square">并且我們希望使用 
            ClientScript.GetPostBackEventReference 和 ClientScript.RegisterForEventValidation 方法
            進行安全腳本的注冊,而后者需要在頁的 Render 階段中才能處理</li>
            </li>
            <li>關于“DataGrid中采取的輔助按鈕支持回發”見<a href="http://www.cnblogs.com/Jinglecat/archive/2007/07/15/818394.html">ASP.NET DEMO8: 為 GridView 每行添加服務器事件</a>
        </ul>
        <br />
        <input type="button" id="Button1" value="Rebind" onclick="location.href=location.href;" />
        <div style="float:left">
        <h3>GridView Version</h3>
        <asp:GridView ID="GridView1" DataKeyNames="ProductID" runat="server" AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound">
            <SelectedRowStyle BackColor="CadetBlue" />
            <Columns>                                          
                <asp:TemplateField HeaderText="ProductName" >                                
                    <ItemTemplate>                    
                        <%# Eval("ProductName") %>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:TextBox ID="txtProductName" runat="server" Text=’<%# Bind("ProductName") %>’ />
                    </EditItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" />                
            </Columns>
        </asp:GridView></div>
        <div style="float:left;padding-left:100px;">
        <h3>DataGrid Version</h3>
        <asp:DataGrid ID="DataGrid1" DataKeyField="ProductID"  runat="server" AutoGenerateColumns="False" OnItemDataBound="DataGrid1_ItemDataBound">
        <SelectedItemStyle BackColor="CadetBlue" />
            <Columns>             
                <asp:TemplateColumn>
                    <ItemTemplate>
                        <asp:Button ID="btnHiddenPostButton" CommandName="Select" runat="server" Text="HiddenPostButton" style="display:none" />
                    </ItemTemplate>
                </asp:TemplateColumn>          
                <asp:BoundColumn DataField="ProductName" HeaderText="ProductName" />
                <asp:BoundColumn DataField="UnitPrice" HeaderText="UnitPrice" /> 
            </Columns>
        </asp:DataGrid></div>
        </li>
        </div>
    </form>
</body>
</html>

 

分享:解析2個ASP.NET小技巧
1. ASP.NET AJAX 中,如何用 JavaScript 調用服務器端的方法? 這里不是指調用簡單的PageMethod,因為靜態方法是不能操作當前頁面的控件的,所以靜態的PageMethod作用就跟普通的WebService一樣,比較局限。 那么,調用一般的服務器端方法,其實就是發起一個

來源:模板無憂//所屬分類:.Net教程/更新時間:2010-05-29
相關.Net教程
一区二区三区中文字幕精品精品 | 国产精品黑丝在线播放 | 亚洲一区二区三区中文字幕 | 91欧美国产| 亚洲男人天堂av| 久久久这里只有精品视频| 欧美日韩在线视频一区二区三区| 少妇太紧太爽又黄又硬又爽| 超碰成人久久| 亚洲永久免费av| 日韩av手机在线| 婷婷激情小说网| 亚洲 另类 春色 国产| 免费久久精品视频| 精品国产制服丝袜高跟| 手机成人在线| 九九热国产视频| 欧美r级电影| 黄色成人在线免费| 国产在线视频一区| avtt香蕉久久| 91麻豆精品国产综合久久久 | 免费无码国产精品| 国一区二区在线观看| 色婷婷久久久综合中文字幕| 亚洲一区国产精品| 欧美 日韩 成人| 久久婷婷国产| 亚洲色图视频网| 国产精品久久久久99| 欧美xxxxx少妇| 国产精品美女久久久久| 久久久久高清精品| 久久久久久久国产精品视频| 五月激情五月婷婷| 国模视频一区| 99精品国产视频| 九九视频这里只有精品| 韩国中文字幕av| 午夜在线视频观看| 成人综合在线网站| 欧美成人三级视频网站| 亚洲 欧美 另类人妖| 香蕉视频成人在线| 成人动漫在线一区| 欧美日韩国产成人在线| 亚洲精品www.| 成人精品一区二区三区电影| 久久久精品人体av艺术| 久久久久久国产| 成人免费黄色av| 久久青草免费| 国产精品国产三级国产三级人妇 | 欧美三级电影一区| 欧洲精品在线一区| www亚洲视频| 亚洲综合欧美| 亚洲美女av网站| 国产日产欧美视频| 手机看片久久| 国产日韩欧美精品一区| 国产aⅴ夜夜欢一区二区三区 | 看片网站欧美日韩| 一区二区亚洲精品国产| 久草综合在线观看| 成人国产激情| 国产精品久久久久精k8| 国产日韩在线观看av| 五月天免费网站| 91精品国产自产在线观看永久∴| 在线播放91灌醉迷j高跟美女| 亚洲欧美日韩国产yyy| 91一区二区视频| 国产精品影视在线| 久久久久久久久电影| 少妇熟女视频一区二区三区 | 国产va免费精品高清在线| 波多野结衣a v在线| 国产精品欧美日韩一区| 欧亚一区二区三区| 一区二区在线观看网站| 国产乱淫av片免费| 成人午夜视频在线观看| 久久乐国产精品| av网站免费在线播放| 成人精品中文字幕| 欧美一区二区成人6969| 青青草成人免费在线视频| 午夜小视频免费| 国产精品久久777777| 99久久精品免费看国产四区| 黄色片免费观看视频| 免费观看日韩电影| 久久不射电影网| 亚洲精品女人久久久| 成人在线电影在线观看视频| 欧美一区二区视频在线观看 | 美女一区二区久久| 欧美精品一区二区免费| 自拍视频一区二区| 99精品美女| 日韩成人在线视频网站| 中文字幕av不卡在线| 一区二区三区在线资源| 在线观看av一区二区| 久久久天堂国产精品| 国产精品扒开腿做爽爽爽视频软件| 成人免费在线播放视频| 国产欧美日韩在线播放| 中文字幕乱码一区二区 | 国产人成一区二区三区影院| 91成人免费视频| 亚洲天堂男人av| 国产成人午夜精品5599 | 国产精品久久久久久久免费大片 | 日本女优一区| 日韩一级高清毛片| 无码日韩人妻精品久久蜜桃| 91精品丝袜国产高跟在线| 91福利资源站| 亚洲不卡中文字幕无码| 亚洲a成人v| 色欧美片视频在线观看| 免费人成自慰网站| 北岛玲精品视频在线观看| 欧美午夜影院在线视频| 成人区一区二区| 亚洲高清国产拍精品26u| 欧美日韩中文字幕日韩欧美| 成人在线观看毛片| 国产成人午夜性a一级毛片| 狠狠久久亚洲欧美专区| 乱熟女高潮一区二区在线| 欧美成人aaa| 色域天天综合网| 日本精品一区在线观看| 国产精品色在线网站| 51久久夜色精品国产麻豆| 欧美性猛交久久久乱大交小说 | 丁香色欲久久久久久综合网| 亚洲久草在线| 欧美午夜影院一区| 亚洲一区二区蜜桃| 米奇777超碰欧美日韩亚洲| 精品盗摄一区二区三区| 国产老头和老头xxxx×| 香港欧美日韩三级黄色一级电影网站| 伊人久久久久久久久久| 人妻aⅴ无码一区二区三区| 午夜综合激情| 欧洲s码亚洲m码精品一区| 国产微拍精品一区| 99精品久久只有精品| 久久艹中文字幕| 色香蕉在线视频| 午夜国产精品影院在线观看| 男女视频网站在线观看| 精品深夜福利视频| 日韩精品在线免费播放| 中文在线永久免费观看| 亚洲一级在线| 热久久免费国产视频| 99久热在线精品996热是什么| 久久综合久久综合亚洲| 久久综合精品一区| 成人视屏在线观看| 欧美日韩在线观看一区二区| 天天操狠狠操夜夜操| 在线电影一区二区| 欧美激情在线有限公司| 日本少妇全体裸体洗澡| 99久久精品国产观看| 就去色蜜桃综合| 成人黄色图片网站| 在线播放日韩导航| 国产a级片视频| 亚洲神马久久| 国产精品大片wwwwww| 中文人妻熟女乱又乱精品| 中文字幕在线免费不卡| 成年人深夜视频| 秋霞影视一区二区三区| 亚洲一区二区久久久| 国产黄a三级三级| 国产.欧美.日韩| 久久综合久久久| 亚洲男男av| 亚洲国产欧美日韩精品| 一色道久久88加勒比一| 国产在线精品一区二区不卡了 | 久草免费新视频| 91蜜桃婷婷狠狠久久综合9色| 日韩欧美在线电影| 一区二区在线视频观看| 亚洲一级一级97网| 欧美精品久久久久久久久46p| 91丝袜高跟美女视频| 亚洲一区二区免费视频软件合集| 久久亚洲影音av资源网 | 精品熟妇无码av免费久久| 国产精品综合久久| 蜜桃传媒视频麻豆一区| 国产区一区二| 日韩精品极品视频免费观看| 好吊日在线视频| 久久亚洲综合色| 337p亚洲精品色噜噜狠狠p| 国产欧美日韩精品一区二区免费| 久久亚洲国产精品| 手机av免费观看| 亚洲无人区一区| av在线网址导航| 在线亚洲自拍| 97se视频在线观看| 欧美性www| 日韩精品视频在线观看免费| 免费成人美女女在线观看| 26uuu国产一区二区三区| 青青草原网站在线观看| 成人短片线上看| 91精品国产色综合久久不卡98| 国产又黄又粗又硬| 欧美亚洲国产一区二区三区va | 国产精品午夜电影| 日韩激情免费视频| 亚洲国产一区二区三区a毛片| 成人中文字幕+乱码+中文字幕| 日本免费久久| 亚洲激情视频在线观看| 久久高清无码视频| 亚洲婷婷综合久久一本伊一区| 91精品91久久久中77777老牛| 国产综合网站| 亚洲aaaaaa| 欧美2区3区4区| 在线成人激情黄色| 中文字幕免费高清网站| 富二代精品短视频| www国产精品视频| 成人日韩在线视频| 久久精品国产精品亚洲红杏| 欧美福利一区二区三区| 老司机在线精品视频| 欧美激情一级欧美精品| 国产日产亚洲系列最新| 在线综合+亚洲+欧美中文字幕| 丰满的亚洲女人毛茸茸| 国产三区在线成人av| 成人观看免费完整观看| 久久不射网站| 鲁丝片一区二区三区| 伊人春色精品| 热久久美女精品天天吊色| 久久爱91午夜羞羞| 精品一区电影国产| 国产在线观看黄色| 色综合视频在线观看| 亚洲av无码一区二区二三区| 久久亚洲精品小早川怜子| 男人揉女人奶房视频60分| 老鸭窝91久久精品色噜噜导演| 久久久久久久久久久久久9999| 天天操综合520| 国产成一区二区| 国产人妖一区| 久久综合伊人77777蜜臀| jizz中国少妇| 欧美精品一区二区在线播放| 欧美一二三区视频| 在线免费一区三区| 国产精品夜夜夜爽阿娇| 亚洲精品高清在线| 中文字幕 亚洲一区| 国产欧美日韩卡一| 亚洲免费黄色网| 东方aⅴ免费观看久久av| 99热亚洲精品| 日本欧美久久久久免费播放网| 一本色道久久综合亚洲二区三区| 欧美一区二区三区另类| 久久精品aaaaaa毛片| 日韩av自拍| 国产精品18毛片一区二区| 五月激激激综合网色播| 国产精品一区专区欧美日韩| 深夜激情久久| 欧洲成人午夜免费大片| 国产精品一区免费在线| 57pao成人国产永久免费| 国产精品天堂蜜av在线播放| 欧美成人免费在线观看| www.精品| 色综合久久久888| 另类激情视频| 欧美成人一区在线| xxxxx性欧美特大| 久久国产精品久久久久久久久久| 天天干天天舔天天射| 久久精品国产成人| 亚洲欧洲精品视频| 久久久精品欧美| 国产免费不卡| 欧美美女操人视频| 国产欧美自拍| 91av视频在线| 精品一区91| 国产精品成人一区二区三区吃奶| 日韩一区二区三区精品| 国产成人一区二区| 久久男人av| 444亚洲人体| av中文一区| 久久免费看av| 激情视频一区| 亚洲激情免费视频| 日韩福利视频网| 欧美二区在线视频| 国产精品自产自拍| 午夜久久久精品| 久久久久九九视频| 国产伦精品一区二区免费| 亚洲精品国久久99热| 极品蜜桃臀肥臀-x88av| 色综合视频在线观看| 国产精品9191| 欧美不卡一区二区| 国产剧情久久久| 中文字幕一区二区精品| gogo亚洲高清大胆美女人体 | 国产精品成人播放| 综合国产视频| 精品久久久久久中文字幕动漫| 欧美黄在线观看| 国产卡一卡二在线| 美女网站色91| 九九九在线观看视频| 久久天堂av综合合色蜜桃网| 在线观看国产网站| 欧美性猛交xxxx| www成人在线| 日韩国产在线播放| 无码国产色欲xxxx视频| 69av在线播放| 久久久久影视| 美女被啪啪一区二区| 99热在线精品观看| 国产精品999视频| av一区二区不卡| 中文字幕在线播放一区| 五月婷婷另类国产| 日产精品久久久久久久| 精品成人一区二区三区| 国产小视频免费观看| 91成人性视频| 偷拍一区二区| 日本一区视频在线观看| 日韩va欧美va亚洲va久久| 老熟妇仑乱视频一区二区 | 国产成人精品优优av| 美女久久久久| 欧美一区二区视频17c | 成人免费a级片| 成人高清视频免费观看| 日韩综合第一页| 日韩欧美精品网址| 无码人妻av一区二区三区波多野 | 久久久久久久久毛片| 日韩欧美中文一区| 成人免费一级视频| 欧美一级免费视频| 色777狠狠狠综合伊人| 中文字幕一区二区三区四区五区| 国产一区二区精品在线观看| 97超碰人人看| 午夜成人在线视频| 日本精品入口免费视频| 中文字幕国产精品| 亚洲综合网站| 欧美大陆一区二区| 美女视频黄免费的久久| 91人妻一区二区三区| 黄色精品在线看| 中文字幕二区三区| 欧美黑人性生活视频| 伊人久久大香线蕉无限次| 视频在线观看成人| 国产v日产∨综合v精品视频| 国产精品一级黄片| 欧美人与性动xxxx| 三级网站免费观看| 国产精品久久久久久久久久| 自拍偷拍欧美| 日本www在线播放| 国产精品视频一区二区三区不卡| 九九热最新地址| 精品小视频在线| 国模大尺度视频一区二区| 久久av一区二区三区漫画| 精品一区二区影视| 这里只有精品在线观看视频|