Sem Göksu
Sem Göksu
Yazılım · Yolculuk · Fenerbahçe
ASP.NET

Gridview Kontrolü ile Çoklu Silme İşlemi

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

12 Aralık 2006 3 dk okuma 3945 1
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.

Bu makalemizinde sonuna geldik. Umarım faydalı bir makale olmustur. Iyi günler ve basarılar dilerim.

Sem GÖKSU
MCP | MCAD.NET | MCTS

Örnek kodlar için mail adresimi kullanabilirsiniz.

askisem@hotmail.com

Etiketler: #ASP.NET #ASP.NET 2.0
Paylaş:

Yorumlar (1)

V
Vedat YILDIZ 10 May 2009 22:54

Sem bey tşk ederim . ama seçme işleminde ki function nereye yazıyoruz linkbutton tıklandığındamı.

Yorum bırak

* Yorumlar moderasyon sonrası yayınlanır. E-posta gizli tutulur.