DataGrid的功能我想大家是知道的,我在實際的應用中遇到如下的問題,客戶要求在刪除之前做一次提示。類
似於windows。首先我們都知道DataGrid支持刪除的功能,我們可以向DataGrid裡面添加刪除列就可以實現,
下面我想用模板列來實現帶提示的刪除按鈕。我們用northwind的示例數據庫作為例子數據庫操縱Categories表。
DataGrid的Html頁的內容如下:
<asp:DataGrid id="grdTest" style="Z-INDEX: 101; LEFT: 205px; POSITION: absolute; TOP: 134px"
runat="server">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:Button id="btnDelete"
runat="server" Text="Button" CommandName="Delete"></asp:Button>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
我們只添加了一個模板列,其他的列都是在運行的時候自動生成的。
可以看出這個模板列很像刪除列但是又不是刪除列,我們給一個普通的Button添加了一個CommandName
="Delete"的屬性。這是用來響應DataGrid的ItemCommand事件的!在刪除列裡面就是這樣的!
接下來就是後台代碼了,代碼如下所示:
private DataSet ds = new DataSet();
private void Page_Load(object sender, System.EventArgs e)
{
// 在此處放置用戶代碼以初始化頁面
if(!this.IsPostBack){
string strConnection = ConfigurationSettings.AppSettings
["sa"].ToString();
SqlConnection myConnection = new SqlConnection(strConnection);
SqlDataAdapter myAdapter = new SqlDataAdapter("SELECT
CategoryID,CategoryName, Description FROM Categories",myConnection);
myAdapter.Fill(ds);
this.grdTest.DataSource = ds.Tables[0].DefaultView;
this.grdTest.DataKeyField = "CategoryID";
this.grdTest.DataBind();
}
}
接下來我們給模板列裡面的每一個按鈕都添加一個客戶端的onclick事件。我想大家都應改知道Attributes屬
性吧!可以通過他向客戶端輸出客戶端控件的屬性比如:長度、顏色等等。但是通常情況我們使用它添加客戶
端事件。知道javascript的朋友肯定知道confirm了!它會彈出一個確認對話框如果確定才提交form否則就不
提交,所以使用這個也是很自然的了。
private void grdTest_ItemDataBound(object sender,
System.Web.UI.WebControls.DataGridItemEventArgs e) {
switch(e.Item.ItemType){
case ListItemType.Item:
case ListItemType.AlternatingItem:
case ListItemType.EditItem:{
Button btn = (Button)e.Item.FindControl("btnDelete");
btn.Attributes.Add("onclick", "return confirm('你是否
確定刪除這條記錄');");
break;
}
}
}
添加好這個事件裡以後我們還需要添加如下的代碼才能完成我們的工作:
private void grdTest_ItemCommand(object source,
System.Web.UI.WebControls.DataGridCommandEventArgs e) {
if(e.CommandName == "Delete"){
this.DeleteRow(this.grdTest.DataKeys[e.Item.ItemIndex].ToString
());
}
}
上面的事件就是我們點擊DataGrid裡面的控件的時候激發的事件,我們可以通過CommandName篩選出來我們想
要激發的方法DeleteRow(),一下就是這個方法的代碼:
private void DeleteRow(string i){
string strConnection = ConfigurationSettings.AppSettings["sa"].ToString
();
SqlConnection myConnection = new SqlConnection(strConnection);
SqlCommand cmd = new SqlCommand("DELETE FROM Categories WHERE
(CategoryID = "+i+")",myConnection);
myConnection.Open();
cmd.ExecuteNonQuery();
myConnection.Close();
}
上面的函數接收一個參數,此參數是當前選中行的關鍵字。