datagrid的功能我想大家是知道的,我在實(shí)際的應(yīng)用中遇到如下的問題,客戶要求在刪除之前做一次提示。類 似于windows。首先我們都知道datagrid支持刪除的功能,我們可以向datagrid里面添加刪除列就可以實(shí)現(xiàn).
給datagrid添加確定刪除的功能
datagrid的功能我想大家是知道的,我在實(shí)際的應(yīng)用中遇到如下的問題,客戶要求在刪除之前做一次提示。類
似于windows。首先我們都知道datagrid支持刪除的功能,我們可以向datagrid里面添加刪除列就可以實(shí)現(xiàn),
下面我想用模板列來實(shí)現(xiàn)帶提示的刪除按鈕。我們用northwind的示例數(shù)據(jù)庫作為例子數(shù)據(jù)庫操縱categories表。
datagrid的html頁的內(nèi)容如下:
<asp:datagrid id="grdtest"
runat="server">
<columns>
<asp:templatecolumn>
<itemtemplate>
<asp:button id="btndelete"
runat="server" text="button" commandname="delete"></asp:button>
</itemtemplate>
</asp:templatecolumn>
</columns>
</asp:datagrid>
我們只添加了一個(gè)模板列,其他的列都是在運(yùn)行的時(shí)候自動(dòng)生成的。
可以看出這個(gè)模板列很像刪除列但是又不是刪除列,我們給一個(gè)普通的button添加了一個(gè)commandname
="delete"的屬性。這是用來響應(yīng)datagrid的itemcommand事件的!在刪除列里面就是這樣的!
接下來就是后臺(tái)代碼了,代碼如下所示:
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();
}
}
接下來我們給模板列里面的每一個(gè)按鈕都添加一個(gè)客戶端的onclick事件。我想大家都應(yīng)改知道attributes屬
性吧!可以通過他向客戶端輸出客戶端控件的屬性比如:長(zhǎng)度、顏色等等。但是通常情況我們使用它添加客戶
端事件。知道javascript的朋友肯定知道confirm了!它會(huì)彈出一個(gè)確認(rèn)對(duì)話框如果確定才提交form否則就不
提交,所以使用這個(gè)也是很自然的了。
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;
}
}
}
添加好這個(gè)事件里以后我們還需要添加如下的代碼才能完成我們的工作:
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
());
}
}
上面的事件就是我們點(diǎn)擊datagrid里面的控件的時(shí)候激發(fā)的事件,我們可以通過commandname篩選出來我們想
要激發(fā)的方法deleterow(),一下就是這個(gè)方法的代碼:
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();
}
上面的函數(shù)接收一個(gè)參數(shù),此參數(shù)是當(dāng)前選中行的關(guān)鍵字。
有錯(cuò)誤的地方請(qǐng)多多指教。e_mail:[email protected]
新聞熱點(diǎn)
疑難解答
圖片精選