Merhaba arkadaşlar bu makalemizde gridview kontrolü içerisinde seçili olan kayıtları silme işleminin nasıl yapılacağına bakacağız...

Kalabalık bir kayıt listesi içerisinde gereksiz olan bir çok kayıt silinmek istendiginde bu kayıtları tek tek silmek çogu zaman kullanıcı için sıkıcı bir istir. Bunun için kullanıcı gereksiz olan kayıtları kendisi seçip, tek bir sefer de silmeyi tercih eder. Bu kullanıcıya büyük kolaylık saglar. Normalde gridview nesnesinde kayıt listesinin yanında sil isimli bir buton koyar ve o satırdaki kaydı sildirirdik. Biz gridview nesnemizi biraz daha genisleterek kullanıcının kayıtların tümünü seçerek veya tek tek silecegi bir kayıt listesi sunacagız. 

 

 

 

 

 

 

 

 

 

 

Ilk olarak visual studio açalım ve asp.net projesi olusturalım. Ben dil olarak C# Seçtim.

  

Daha sonra projemizde kullanacagımız nesnelerden bahsedelim. Ben projemde Northwind database'i içerisindeki Products tablosunu kullanacagım. Field olarak da Grid içerisin de ProductID, ProductName ve UnitPrice fieldlarını kullanacagım. Ek olarak grid içerisinde bir template field olusturup Header Template içerisine CheckAll isimli bir checkbox ve item template içerisinede deleteRec isimli bir checkbox kontrolü ekledim. Birde seçecegim kayıtları sildirmek için bir adet link buton ekledim. Form tasarımım asagıdaki gibi olustu. 

  

Formumuzun tasarımını tamamladıktan sonra simdi Tümünü seç ve tek tek seçim yapmak için gerekli olan javasctipt kodlarını yazalım.  

function 
check_uncheck(Val) 

    
var  ValChecked = Val.checked; 
    
var  ValId = Val.id; 
    
var  frm = document.forms[0]; 
    for  (i = 0; i < frm.length; i++) 
    

        
if  (this != null ) 
        

            i
f  (ValId.indexOf('CheckAll' ) != - 1) 
            

                
if  (ValChecked) 
                    
frm.elements[i].checked = true ; 
                
else 
                    
frm.elements[i].checked = false ; 
            

            
else  if (ValId.indexOf('deleteRec' ) != - 1) 
            

                
if  (frm.elements[i].checked == false ) 
                    frm.elements[1].checked = false ; 
            

        
// if

 

 

 

 

 

 

 

 

 

 

    } // for 
// function

 

 

 

 

 

 

 

 

 

 

Javascript içerisine fonksiyonlarımızı yazdıktan sonra bunu gridview nesnesi üzerindeki checkboxlarda çagıralım.  

 

 

 

 

 

 

 

 

 

 

<asp GridView  ID ="dbGrid" runat ="server" AutoGenerateColumns ="False" CellPadding ="4"  Font-Names  ="Verdana" Font-Size ="X-Small"ForeColor ="#333333" GridLines ="None"  Width  ="448px"> 
<FooterStyle BackColor ="#5D7B9D" Font-Bold ="True" ForeColor ="White" /> 
<Columns>     
    
<asp:TemplateField> 
        
<HeaderTemplate> 
            
<asp:CheckBox ID ="CheckAll" runat ="server" onClick ="return check_uncheck(this);" /> --->>> tümünü Seç 
        
<HeaderTemplate
    
temTemplate> <asp : Label ID ="ProductID" Visible ="false" Text  =' ' runat  ="server" /> 
        
<asp:CheckBox ID ="deleteRec" runat ="server" onClick ="return check_uncheck (this );" /> --->>> Tek Tek Seç 
    <
ItemTemplate
<FooterTemplate> 
<asp:TemplateField 
<asp:BoundField DataField ="ProductID" HeaderText ="ProductID" /> 
<asp:BoundField DataField ="ProductName" HeaderText ="ProductName" /> 
<asp:BoundField DataField ="UnitPrice" HeaderText ="UnitPrice" /> 
</
Columns 
<  RowStyle BackColor ="#F7F6F3" ForeColor ="#333333" /> 
<  EditRowStyle BackColor ="#999999" /> 
<  SelectedRowStyle BackColor ="#E2DED6" Font-Bold ="True" ForeColor ="#333333" /> 
<  PagerStyle BackColor ="#284775" ForeColor ="White" HorizontalAlign ="Center" /> 
<  HeaderStyle BackColor ="#5D7B9D" Font-Bold ="True" ForeColor ="White" HorizontalAlign ="Left" /> 
<  AlternatingRowStyle BackColor ="White" ForeColor ="#284775" /> 
</
asp GridView > 

 

 

 

 

 

 

 

 

 

 

Bu yazdıklarımızı test edelim. Projemizi çalıstıralım ve tek tek kayıtları seçelim. Ardından tümünü seç butonuna tıklayıp düzgün çalısıp çalısmadıgını kontrol edelim.

  

Kodumuz düzgün çalıstıgına göre artık sectigimiz kayıtları silelim.
 

 

 

 

 

 

 

 

 

 

 

protected void LinkButton2_Click(object sender, EventArgs e) 

    
string  gvIDs = "" ; 
    bool  chkBox = false ; 
    
foreach  (GridViewRow gv in dbGrid.Rows) 
    

        
CheckBox  deleteChkBxItem = (CheckBox )gv.FindControl("deleteRec" ); 
        
if  (deleteChkBxItem.Checked) 
        

            
chkBox = true ; 
            
gvIDs += (( Label )gv.FindControl("ProductID" )).Text.ToString() + "," ; 
        

    
}

 

 

 

 

 

 

 

 

 

 

    SqlConnection cn = new SqlConnection ("Data Source=.; Initial Catalog=Northwind; uid=sa; pwd=" ); 
    
if (chkBox) 
    

        
try 
        

            
string deleteSQL = "DELETE from Products WHERE ProductID IN (" + gvIDs.Substring(0, gvIDs.LastIndexOf( "," )) + ")" ; 
            
SqlCommand cmd = new SqlCommand (deleteSQL, cn); 
            
cn.Open(); 
            
cmd.ExecuteNonQuery(); 
            
dbGrid.DataSource = DataTableGetirLan(); 
            
dbGrid.DataBind(); 
            
Response.Write( "Seçmis oldugunuz kayıtlar Silindi !" ); 
        

        
catch (SqlException err) 
        

            
Response.Write(err.Message.ToString()); 
        

        
finally 
        

            
cn.Close(); 
        

    


Son olarak silme islemini de test edelim. 

  

Gördügümüz gibi tek sefer de seçmis oldugumuz kayıtlar silindi. 

 

Not: Eger sizde nortwind içerisindeki Products tablosunu kullanacaksanız diger tablolar ile arasında bulunan iliskileri kaldırın. Yoksa kayıtları silerken hata alacaksınız.