GridView 按钮

//GridView中添加按钮后,如何触发按钮的各种事件?

1.在GridView的“编辑列”属性窗口中,增加新的Botton列。

2.然后再该窗口右边属性中,将外观项下的ButtonType设置一下,设置项有:如:Link、Button、Image。

3.属性设置完成后,在右边属性列表窗口的下方有这样一行超链接蓝字:将此字段转换为TemplateField,单击这个超链接,把该列插入进来的字段转换为模版。

//添加了一个删除控件,并将其转换为模版后的代码,该控件还和在GridView所在行的主键进行绑定,把主键作为参数带到该控件的各个事件函数中。

<asp:TemplateField ShowHeader="False" HeaderText="删除">

             <ItemTemplate>

                    <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandArgument='<%# Eval("ClientID") %>'

                            OnClick="LinkButton1_Click" Text="删除"></asp:LinkButton>

                </ItemTemplate>

       </asp:TemplateField>

 

//这是一个没有绑定字段值的新增Button列,将其装换为模版后的代码如下:

<asp:TemplateField>

             <ItemTemplate>

                 <asp:Button ID="Button2" runat="server" CausesValidation="false" CommandName="" Text="按钮" OnClick="Button2_Click" />

             </ItemTemplate>

     </asp:TemplateField>

4.  然后即可在编辑模版状态下,编辑、设置这个控件的各种事件了,比如双击这个控件按钮,系统则会自动在.cs文件中添加该控件的OnClick事件触发的函数。

注意:如果你的GridView中加入了多个转换为模版的列,进入编辑模版状态后,要选择相应的转换为模版的列,才能进行编辑。如下图:


另:在cs文件中调用Gridview中按钮绑定的值:

 1protected void LinkButton2_Click(object sender, EventArgs e)
 2    {
 3        SqlConnection myconn;
 4        SqlCommand mycommand;
 5        myconn = new SqlConnection(ConfigurationManager.ConnectionStrings["BaseConnectionString"].ConnectionString);
 6        string sql = "update Bbs_Message set ISTOP=1 where Bbs_MessageIS=" + ((LinkButton)sender).CommandArgument.ToString();
 7        //Response.Write(sql);
 8        myconn.Open();
 9        mycommand = new SqlCommand(sql, myconn);
10        mycommand.ExecuteNonQuery();
11        myconn.Close();
12
13        Response.Redirect("SQS_ADD3.aspx?XkzSqsID=" + Request.QueryString["XkzSqsID"].ToString());
14    }

HyperLink的操作前段时间已经研究的颇有心得了,但是ButtonField却一直没有解决,这个问题困扰了我多日,中间因为考试中段了一段时间,现在重新找出来发现问题还是没有解决,在查找了一些资料之后终于搞定了,其实挺简单的,这里面用到了一个小技巧,那就是使用TemplateField。

------------------爱国分界线----------------------

    HyperLink的应用只要是页面转向,中间要设置一些诸如ID啊、NAME啊之类的属性,用起来非常方便,其主要属性设置为:

<asp:HyperLinkField DataNavigateUrlFields="UserId,UserName" DataNavigateUrlFormatString="userdetail.aspx?UserId={0} & UserName={1}" DataTextField="UserName" HeaderText="用户详细信息" Target="_blank" />

看上去是不是非常强悍?用起来更强悍!

    ButtonField的属性主要的就一个CommandName,看起来很羸弱,用起来也是如此。看看它的典型应用的属性设置吧:

<asp:ButtonField ButtonType="Button" CommandName="Click1" Text="按钮点击事件1" />
<asp:ButtonField ButtonType="Button" CommandName="Click2" Text="按钮点击事件2" />

protected   void  GridView1_OnRowCommand( object  sender, GridViewCommandEventArgs e)

{

       if  (e.CommandName.ToString() ==("Click1"))

           Label1.Text "you Click" e.CommandName.ToString()+1111;

      else

          Label1.Text "you Click" e.CommandName.ToString() 222;

}

这个CommandNam就是为了判断选取的是哪一列的按钮。虽然代码和属性都很简单,但是ButtonField应用起来很多地方不方便,比如在AJAX架构中放在UpdatePanel种的时候,使用JavaScript就让人困扰。于是我们来介绍一下模板列TemplateField。

        很多ASP.NET 2.0程序设计高手在网上贴了很多怎么转换和使用模板列,我这里就直接拿过来了:

1、点击GridView的快捷箭头,选‘编辑列’。
2、加入一个ButtonFiled,在右边的属性框里设置HeadText(用以显示),定义一个CommandName(用以你点击以后触发的动作)
3、点右下角的‘转化为模版列’,ok。
4、右击GridView,‘编辑模版’--‘Column[..]--你之前定义的HeadText’,ItemTemplate里看见你的按钮了吗?点中,属性里有一项‘OnClientClick’,把“javascript:return confirm('真的要删除吗?');”粘贴进去。
5、搞定你需要的功能了。
6、如果你想点击按钮触发其他事件,可以在RowCommand事件里详细写。。。
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "MyBtnClicked")//前面你定义的CommandName
    {
        Response.Write("kkk clicked");
    }
}

如果你使用了微软的数据源空间SqlDataSource,那么你还可以直接设置Button将要操作的数据列,而不用再去写代码,如下设置:

1、在前面的步骤4中,你在itemTemplate里看见你的按钮右上角的小箭头了吧,verygood,点击‘编辑DataBings’。。。
2、看见这一级别的绑定了吗?把 CommandArgument和你想操作的字段绑定吧。。。(右边下拉列表选择)
3、ok,现在你可以类似下面方法调用
------------------
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "MyBtnClicked")
    {
        Response.Write("you wanted " + e.CommandArgument.ToString());
    }
}
------------------
你无非就是想取到结果集中的cell里的内容,现在你想得到的内容绑定在CommandArgument里了,你就不用再什么index什么cell[].text了(复杂的cell你还要findcontrol,呵呵)

OK,这就是模板列最有意思的应用了,当然了,应该还有更加强大的应用,但是迄今为止我用到的也就这么一些了,也只能介绍这么多了。我最喜欢的还是很方便的就可以在里面添加JavaScript代码,很强大。

http://www.cnblogs.com/zrlhappy/articles/349852.html

http://blog.sina.com.cn/s/blog_4696f46b010097rq.html

http://www.cnblogs.com/lbsx/archive/2010/10/06/1844661.html


在单击 GridView 控件中的按钮时,将引发 RowCommand 事件。 GridView 控件具有内置功能,用于进行编辑、删除和分页等操作。 还可以添加按钮并使用 RowCommand 事件向控件添加自定义功能。 可以通过下面的方式向 GridView 控件添加自定义功能: 向 GridView 控件添加 ButtonField 字段。 向 GridView 控件中的模板添加 Button、LinkButton 或 ImageButton 控件。 可以使用事件参数的 CommandName 属性在事件处理程序方法中标识按钮的功能。 如果使用的是 ButtonField 或 TemplateField 对象,则还可以使用 CommandArgument 属性来标识当前行。 使用的是 ButtonField 对象时,CommandArgument 属性自动设置为行索引。 使用的是 TemplateField 对象时,控件不会自动设置 CommandArgument 属性。 在这种情况下,如果必须在事件处理程序中确定行索引,则可以使用数据绑定表达式将该按钮的 CommandArgument 属性设置为行索引。 响应 GridView 控件中的按钮事件 将按钮的 CommandName 属性设置为标识其功能的字符串,如“打印”或“复制”。 如果使用的是 TemplateField 对象并且必须在事件处理程序方法中访问行索引,则将按钮的 CommandArgument 属性设置为标识当前行的表达式。 下面的示例演示如何将 TemplateField 列中某个按钮的 CommandArgument 属性设置为当前行索引。 在该示例中,该列包含一个显示购物车的 Button 控件。 VBC#C++F#JScript 复制不支持该语言或没有可用的代码示例。 VBC#C++F#JScript 复制 <asp:Button ID="AddButton" runat="server" CommandName="AddToCart" CommandArgument="" Text="Add to Cart" /> 为 GridView 控件的 RowCommand 事件创建一个方法。 在该方法中,执行下列操作: 检查事件参数对象的 CommandName 属性来查看传入什么字符串。 如果需要,使用 CommandArgument 属性检索包含该按钮的行的索引。 为用户单击的按钮执行相应的逻辑。 下面的示例演示响应 GridView 控件中的按钮单击的方法。 在该示例中,TemplateField 列中的按钮发送命令“AddToCart”。 RowCommand 事件处理程序确定被单击的按钮。 如果被单击的是购物车按钮,则代码执行相应的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值