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.htmlhttp://blog.sina.com.cn/s/blog_4696f46b010097rq.html
http://www.cnblogs.com/lbsx/archive/2010/10/06/1844661.html