1. 程式人生 > >點選GridView模版列裡的按鈕取GridView當前被操作行的資料

點選GridView模版列裡的按鈕取GridView當前被操作行的資料

這種情況經常都會有的,就是在GridView里加一個模版列,裡面放一些按鈕,然後呢,點選這些按鈕的時候,要可以取到GridView當前被點選的行的欄位裡的內容

一般有兩種情況,只需要取一個欄位的值,和要取多個欄位的值,其實都是一樣的方法,就是使用CommandArgument屬性

一、只需要取一個欄位的值:

在GridView裡的定義

<asp:TemplateField ShowHeader="False">
                     <ItemTemplate>
                         <asp:Button ID="Button1" runat="server" Text="取編號" CommandArgument='<%# Eval("id") %>'
CommandName="getID" />
                     </ItemTemplate>
                     <ItemStyle HorizontalAlign="Center" />
                 </asp:TemplateField>

紅色那裡,就是設定這個按鈕帶到傳遞的引數是當前行的id欄位的值,看後臺的程式碼

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
     {
         if (e.CommandName == "getID")
         {
             Response.Write("<br>id:" + e.CommandArgument);
            Button mybt = new Button();
             mybt = (Button)e.CommandSource;
             Response.Write("<br>text:" + mybt.Text);

             Response.Write("<br>type:" + sender.GetType().ToString());
         }

看見我使用了e.CommandSource取被點選的按鈕的Text屬性沒有?

有時候按鈕可能會因為一個欄位的值不同,就有不同的Text屬性,嗯,如果一個表裡有記錄“是否啟用”這樣的欄位,就經常需要在顯示他的GridView里加模版列,顯示“啟用”、“禁用”這樣的快速操作按鈕,如果每一行記錄都顯示兩個按鈕,是很難看的,所以可以使用一個按鈕,進行兩種操作,按鈕可以這樣定義:

<asp:Button ID="Button1" runat="server" Text='<%# Convert.ToInt32(Eval("isUse"))==0:"啟用"?"禁用" %>'
CommandArgument='<%# Eval("id") %>' CommandName="getID" />

看他的Text屬性,如果isUse欄位的值是0,那當前記錄是在禁用狀態的,所以快捷操作按鈕應該顯示“啟用”,否則呢,就顯示“禁用”

然後呢,就可以在RowCommand事件裡,使用e.CommandSource取這個按鈕的Text屬性,判斷當前的操作是要“啟用”還是“禁用”了

二、要取多個欄位的值

因為CommandArgument屬性只可以傳遞一個值,所以如果要傳遞多個欄位的值的時候,最好是轉化成傳遞當前行的行號,如果我們有GridView的一個行號,我們就可以取到這一行的所有資料了

在GridView裡的定義

<asp:TemplateField ShowHeader="False">
                     <ItemTemplate>
                         <asp:Button ID="Button2" runat="server" Text="取行號" CommandArgument='<%# Container.DataItemIndex  %>' CommandName="getRow" />
                     </ItemTemplate>
                     <ItemStyle HorizontalAlign="Center" />
                 </asp:TemplateField>

看紅色那裡,利用了繫結<%# Container.DataItemIndex  %>傳遞當前行號,DataItemIndex是從0開始的,所以每一行都要加1

後臺,經過測試 應該不用加1(VS2008)

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
     {
         if (e.CommandName == "getRow")
         {
             Response.Write("當前行號為:" + e.CommandArgument);
         }
     }

有了當前行的行號,就可以用GridView1.Rows[e.CommandArgument].Cells[i].Text取第i列的值了,如果有一列是模版列,也可以用FindControl方法取值

相關推薦

GridView模版按鈕GridView當前操作資料

這種情況經常都會有的,就是在GridView里加一個模版列,裡面放一些按鈕,然後呢,點選這些按鈕的時候,要可以取到GridView當前被點選的行的欄位裡的內容 一般有兩種情況,只需要取一個欄位的值,和要取多個欄位的值,其實都是一樣的方法,就是使用CommandArgument屬性 一、只需要取一個欄位的值:

前端外掛jquery.singlePageNav.min.js(導航選單跳轉與縮放選單摺疊按鈕緩衝效果外掛)

Bootstrap導航點選選單跳轉與點選縮放選單摺疊按鈕緩衝效果外掛jquery.singlePageNav.min.js 引入步驟: <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"><

iOS 攔截導航欄返回按鈕事件(只攔截事件不改變系統按鈕樣式)

#import <UIKit/UIKit.h> @protocol BackButtonHandlerProtocol <NSObject> @optional /** 重寫下面的方法以攔截導航欄返回按鈕點選事件,返回 YES 則 pop,NO 則不 pop @

selenium連結進入子頁面抓內容(新聞抓案例一)

找了一個新聞網站練習爬蟲抓取,目標:逐一點選目錄標題,進入詳細新聞頁面,抓取子頁面的標題和正文內容並打印出來,返回目錄標題頁,點選下一篇文章。注:沒有新開視窗,是在原視窗實現跳轉。新開視窗進行抓取看下一篇文章。 試了很多種方法都抓取不到class=rightContent下

ExtJS6 treegrid 一次載入資料後,展開仍然會從伺服器資料

Ext.create("Ext.tree.Panel", { flex: 1, store: { type: 'tree', fi

輪播圖片左右按鈕,實現輪播效果

點選左右按鈕,實現圖片輪播效果,js程式碼如下: $(function () { var index = 1; var pPage = 1; var $v_citemss = $(".citemss"); var $v_show = $v_c

防止快速多次調節音量按鈕多次呼叫網路介面

private Runnable reqeustSetVoice; public void setDeviceVoice(final int count, BindBean bean, ImageButton deviceVoice) {

js 實現間隔相同時間自動觸發兩個按鈕事件,兩個按鈕觸發事件時間間隔一樣,然後迴圈

問題: function clickTuo() { $("#ffimg1").trigger("click"); }; function clickTuo2() {

cmd命令python、pip的具體操作及問題

1.怎麼開啟及退出python環境? 2.怎麼檢視pip的安裝情況? (是 Python 包管理工具,該工具提供了對Python 包的查詢、下載、安裝、解除安裝的功能。 目前如果你在 python.org 下載最新版本的安裝包,則是已經自帶了該工具

table中的某一個td 獲得這個tr的所有資料

                功能: 點選table中的某一個td,獲得這個tr的所有資料效果圖<html><head><script>    function getData2(element){        document.getElementById("name

百度地圖新增標註並獲取當前地理名稱

html部分: <div id="allmap"></div> <style type="text/css"> body, html{width: 100%;height: 100%;overflow: hidden;margi

android 如何通知欄中的前臺服務,返回當前正在進行的活動

剛開始編寫的時候在處理PendingIntent時,就是簡單的讓所開啟的intent  new出想回到的活動,但是後來發現這樣實際上只是新建了一個相同的活動覆蓋住了正在進行的活動上,就像寫的音樂播放器,在後臺的時候若我

PhpStorm怎樣配置與GIT關聯,在編輯器按鈕更新

我的編輯器環境用的是PhpStorm和Git的組合,之前在使用GIT的時候,都是使用LOGO為小烏龜的Tortoise Git來推送和拉取程式碼,每次要拉取和更新程式碼的時候都要先到資料夾下進行右擊操作才能開啟操作介面,感覺不夠方便,而直接使用PhpStorm內

js已知一個文字輸入框,通過按鈕,用if 判斷輸入框的數字是否能3整除

<!DOCTYPE html> <html> <head>     <title>第一題</title>     <meta charset="utf-8"> </head> <!--

小程式按鈕複製文案

index.js程式碼 Page({ /* 頁面的初始資料 */ data: { order_ids: "http://t.cn/Rgh0o1T" }, // 一鍵複製事件 copyBtn: function (e) { var that = this; w

iOS開發筆記-cell按鈕展開收起-動態改變cell

1.cell for row <span style="white-space:pre"><span style="background-color: rgb(255, 255, 255);"> </span></span>

detailview按鈕 彈出視窗中使用datagrid

$(function(){ $('#dg').datagrid({ title:'test', view:detailview, remoteSort:false, sin

swing 自定義最小化按鈕後,實現工作圖示,使窗體重新顯示

jf.setUndecorated(true); // 去掉視窗的裝飾 jf.getRootPane().setWindowDecorationStyle(JRootPane.NONE)

如何用資料驅動實現通用化巡檢APP(如何一個介面新增多個拍照按鈕並顯示在不同的imageview

最近啟動了一個新專案叫通用化,老師的設想是這樣的:APP裡顯示的內容和佈局都是不確定的,需要從後臺傳過來的json串中解析出來,然後經過一系列的迴圈和判斷語句,為APP新增上json中要求的佈局和內容,就連文字的大小和顏色也都是從後臺獲取的。 剛開始的時候覺得

c# 按鈕刪除gridview中行

<span style="white-space:pre"> </span>/// <summary> /// 刪除選中行資料 /// </summary> /// <p