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。
------------------爱国分界线----------------------
<asp:HyperLinkField DataNavigateUrlFields="UserId,UserName" DataNavigateUrlFormatString="userdetail.aspx?UserId={0} & UserName={1}" DataTextField="UserName" HeaderText="用户详细信息" Target="_blank" />
看上去是不是非常强悍?用起来更强悍!
<asp:ButtonField <asp:ButtonField |
protected { } |
这个CommandNam就是为了判断选取的是哪一列的按钮。虽然代码和属性都很简单,但是ButtonField应用起来很多地方不方便,比如在AJAX架构中放在UpdatePanel种的时候,使用JavaScript就让人困扰。于是我们来介绍一下模板列TemplateField。
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 { } |
如果你使用了微软的数据源空间SqlDataSource,那么你还可以直接设置Button将要操作的数据列,而不用再去写代码,如下设置:
1、在前面的步骤4中,你在itemTemplate里看见你的按钮右上角的小箭头了吧,verygood,点击‘编辑DataBings’。。。 2、看见这一级别的绑定了吗?把 CommandArgument和你想操作的字段绑定吧。。。(右边下拉列表选择) 3、ok,现在你可以类似下面方法调用 ------------------ protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs { } ------------------ 你无非就是想取到结果集中的cell里的内容,现在你想得到的内容绑定在CommandArgument里了,你就不用再什么index什么cell[].text了(复杂的cell你还要findcontrol,呵呵) |
OK,这就是模板列最有意思的应用了,当然了,应该还有更加强大的应用,但是迄今为止我用到的也就这么一些了,也只能介绍这么多了。我最喜欢的还是很方便的就可以在里面添加JavaScript代码,很强大。
http://www.cnblogs.com/zrlhappy/articles/349852.htmlhttp://blog.sina.com.cn/s/blog_4696f46b010097rq.html
http://www.cnblogs.com/lbsx/archive/2010/10/06/1844661.html