您所在的位置: 程序员家园 -> 家园博客 ->
 
在哪里摔倒
就在哪里自己爬起来

用户登录

查  找

最新评论

最新留言

常用网站

网易邮箱 GMAIL  

百度搜索 MSDN

霏凡软件 BT精品

影视帝国 射 手 网

电驴下载 全 库 网

友情连接

茄菲的窝 冰冰博客

枫叶飘零 玫  瑰

ACEN 云 豹 子

统  计



Dict.CN 在线词典, 英语学习, 在线翻译
点击GridView模版列里的按钮取GridView当前被操作行的数据 
狼子 发表于 2006-12-12 14:14:00 阅读全文 | 回复(1) | 引用通告 | 编辑  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方法取值

Re:点击GridView模版列里的按钮取GridView当前被操作行的数据
mountain315发表评论于2008-9-27 14:38:00 个人主页 | 引用 | 返回 | 删除 | 回复

修正上面取行号的bug:

从第一页第一行为0开始计算:Container.DataItemIndex

从当前页第一行为0开始计算:DataBinder.Eval(Container,"RowIndex")

发表评论:

    昵称:
    密码:
    主页:
    标题:
Powered by Oblog.