GridView模版列里的按钮取GridView当前被操作行的数据或id

来源:互联网 发布:淘宝无线端网址 编辑:程序博客网 时间:2024/06/06 13:20
点击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 + 1 %>' CommandName="getRow" />
                     </ItemTemplate>
                     <ItemStyle HorizontalAlign="Center" />
                 </asp:TemplateField>

看红色那里,利用了绑定<%# Container.DataItemIndex + 1 %>传递当前行号,DataItemIndex是从0开始的,所以每一行都要加1

后台

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方法取值

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 十个月的小孩不吃饭怎么办 家长要调幼儿园监控怎么办 自己带孩子婆婆生气怎么办 婆婆老是觉得我奶水不够怎么办 1岁小儿特别懒怎么办 17的孩子很懒怎么办 上大班的孩子不愿写字怎么办 快上中班的小朋友不爱学习怎么办 小学生两边肩膀不平应该怎么办 写字右肩膀疼是怎么办 开车久了肩膀疼怎么办 3岁宝宝撕书怎么办 孩子上幼儿园不爱写字怎么办 一年级小孩不爱做作业怎么办 小孩不愿多做作业怎么办 小孩一年级不自觉做作业怎么办 小孩会读不会写怎么办 好多字都不会写怎么办 写作业怎么办才能写快 五周宝宝爱玩不写字怎么办 爱玩手机的小孩怎么办? 一年级学生记不住生字怎么办 一年级小孩记不住生字怎么办 配镜度数高了怎么办 宝宝两岁半不肯坐马桶拉臭臭怎么办 儿子字写得不好 怎么办 小孩不听话不爱读书和写字怎么办 两岁宝宝不愿意穿衣服怎么办 做题粗心不认真怎么办 5岁宝宝不会写字怎么办 四岁宝宝不会写字怎么办 4岁宝宝不写字怎么办 四岁宝宝不写字怎么办 孩子学习粗心计算能力差怎么办 一年级的小朋友不爱看书怎么办 马上要生了害怕怎么办 孩子做题不爱读题怎么办 孩子作业写的慢怎么办 孩子学习不好怎么办我们有绝招 英语不会做题怎么办呢? 小学二年级孩子厌学怎么办