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)
疑難解答
圖片精選