GridView Kontrolü Giris – II – Seçme Güncelleme ve Silme Islemleri

Bir önceki makalemizde GridView kontrolüne giris yapmistik. Bu makalemizde GridView kontrolünde seçme,silme ve güncelleme islemlerine deginecegiz.

Bu makalemizde önceki makalemizde yazdigimiz koda devam edecegiz. Bir önceki makaleye GridView Kontrolü Giris – 1 linkinden erisebilirsiniz.

Ilk olarak daha önceki makalemizdeki default.aspx sayfasini asagidaki sekilde güncelleyin

.

<table>
    <tr runat="server" id="OgrenciBilgiTR">
        <td>
            <table>
                <tr>
                    <td>
                        Ad
                    </td>
                    <td>
                  <asp:TextBox ID="AdTextBox" runat="server"></asp:TextBox>
                    </td>
                    <td>
                        Soyad
                    </td>
                    <td>
                <asp:TextBox ID="SoyadTextBox" runat="server"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td>
                        TC Kimlik No
                    </td>
                    <td>
           <asp:TextBox ID="TCKimlikNoTextBox" runat="server"></asp:TextBox>
                    </td>
                    <td>
                        Cinsiyet
                    </td>
                    <td>
          <asp:TextBox ID="CinsiyetTextBox" runat="server"></asp:TextBox>
                   </td>
                </tr>
                <tr>
                    <td>
                        Ögrenci No
                    </td>
                    <td>
           <asp:TextBox ID="OgrenciNoTextBox" runat="server"></asp:TextBox>
                    </td>
                    <td>
                        Dogum Yeri
                    </td>
                    <td>
           <asp:TextBox ID="DogumYeriTextBox" runat="server"></asp:TextBox>
                    </td>
                </tr>
            </table>
        </td>
    </tr>
    <tr>
        <td>
        <asp:GridView ID="GridView1" runat="server"
       AutoGenerateColumns="False" DataKeyNames="No">
                <Columns>
<asp:BoundField DataField="Ad" HeaderText="Ad" SortExpression="Ad" />
<asp:BoundField DataField="Soyad" HeaderText="Soyad" SortExpression="Soyad" />
<asp:BoundField DataField="TCKimlikNo" HeaderText="TCKimlikNo"
 SortExpression="TCKimlikNo" />
<asp:BoundField DataField="Cinsiyet" HeaderText="Cinsiyet" 
SortExpression="Cinsiyet" />
<asp:BoundField DataField="Numara" HeaderText="Numara" 
SortExpression="Numara" />
<asp:BoundField DataField="DogumYeri" HeaderText="DogumYeri" 
SortExpression="DogumYeri" />
<asp:TemplateField></asp:TemplateField>
                </Columns>
            </asp:GridView>
        </td>
    </tr>
</table>

Yukaridaki kodda görüldügü gibi GridView kontrolünü bir tablo içine alarak tablonun ilk satirina yeni bir tablo ekledik ve bu tabloya ögrenci bilgilerini göstermek için gerekli olan yapiyi ekledik. GridView kontrolü üzerinde bir ögrenciyi seçtigimizde seçilen ögrencinin bilgileri bu ekledigimiz tablo içinde görünecek. Ayrica ilk makalemizde kullandigimiz SqlDataSource sildik. Bu makalemizde gridview i kendimiz manuel olarak bind edecegiz.

No alani tablonun primary keyi oldugu ve son kullanici için önemli olmadigi için bu kismi grid kolonlarindan kaldirdik.

<asp:BoundField DataField="No" HeaderText="No" InsertVisible="False"
 ReadOnly="True" SortExpression="No" />

.
No alani Kisi tablomuz için primary key oldugu için bu alani kayit seçme ve silme isleminde kullanacagiz. GridView kontrolünde kolonlardaki keyleri bulmak için DataKeyNames özelligini kullaniyoruz. Bu yüzden GridViewe DataKeyNames="No"özelligini ekliyoruz. DataKeyNames i nasil kullanacagimiza asagida deginecegiz.

Simdi sayfamizin Design moduna geçip gridi seçerek gridin sag üstünde çikan oku tiklayip Edit Columns linkini tiklayalim önümüze asagidaki ekran gelecek.

Available fields kismindan Command Fieldi seçerek Add diyelim. Bu islemin sonunda selected fields kismina bir command field eklenecektir. Command field grid üzerinde seçme silme güncelleme gibi islemleri yapmamizi saglayacak butonlari eklemek için kullanilir. Eklenen butonlar Link,Button veya Image olabilir. Grid üzerinden seçme ve silme islemi yapacagimiz için sadece ShowDeleteButton ve ShowSelectButton özelliklerini true yapip diger button özelliklerini false yapalim. Seçme ve silme islemleri için iki buton eklemis olduk bunlarin textlerini ise DeleteText SelectText özelliklerini kullanarak sil ve seç olarak degistirebiliriz. Yaptigimiz islem sonucunda Design modda GridView’imizin görünümü asagidaki gibi oldu.

Yukarda design modda yaptigimiz islem sonucu wizard bizim yerimize asagidaki kodu üreterek GridView in columns tagi içine koyar. Isterseniz Design modunu kullanmadan asagidaki kod satirini kendinizde ekleyerek ayni islemi gerçeklestirmis olabilirsiniz.

<asp:CommandField DeleteText="Sil" SelectText="Seç" ShowCancelButton="False" 
ShowDeleteButton="True" ShowSelectButton="True" />

Sirada gride ekledigimiz butonlar tiklandigi zaman çalisacak olan eventlari ayarlamak kaldi. Gridin özelliklerine girerek event tabina geçin. SelectedIndexChanging ve RowDeleting eventlarini ekleyelim. Bunun için eventin karsisindaki kutucuga iki kere tiklamamiz yeterli. Kod kismana girerek ekledigimiz eventlar için olusturulan fonksiyonlarin içini asagidaki gibi dolduralim.  Ayrica giridi manuel bind etmek için asagidaki GridDoldur () fonksiyonunu da projemize ekleyelim ve  bu fonksiyonu page load içinden çagiralim.

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
GridDoldur();
}

public void GridDoldur()
{
    string conString = "Data Source=.;Initial Catalog=Ornek;
    Integrated Security=True";
    SqlConnection connection = new SqlConnection(conString);
    connection.Open();
    DataTable dt = new DataTable();
    SqlDataAdapter da = new SqlDataAdapter
    ("Select No,Ad,Soyad,TCKimlikNo,Cinsiyet,DogumYeri,Numara
        from Kisi ", connection);
    da.SelectCommand.ExecuteNonQuery();
    da.Fill(dt);
    GridView1.DataSource = dt;
    GridView1.DataBind();
}

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
int No = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values[0]);
string conString = "Data Source=.;Initial Catalog=Ornek;
  Integrated Security=True";
SqlConnection connection = new SqlConnection(conString);
connection.Open();
    SqlCommand command = new SqlCommand("Delete from Kisi where 
No = " + No.ToString(), connection);
    command.ExecuteReader();
    GridDoldur();
}

protected void GridView1_SelectedIndexChanging
(object sender, GridViewSelectEventArgs e)
{
    int No = Convert.ToInt32(GridView1.DataKeys[e.NewSelectedIndex].Values[0]);
    string conString = "Data Source=.;Initial 
        Catalog=Ornek;Integrated Security=True";
    SqlConnection connection = new SqlConnection(conString);
    connection.Open();
    DataTable dt = new DataTable();
    SqlDataAdapter da = new SqlDataAdapter("Select Ad,Soyad,TCKimlikNo,
Cinsiyet,DogumYeri,Numara from Kisi where No = " + No.ToString(), connection);
    da.SelectCommand.ExecuteNonQuery();
    da.Fill(dt);

    AdTextBox.Text = dt.Rows[0]["Ad"].ToString();
    SoyadTextBox.Text = dt.Rows[0]["Soyad"].ToString();
    TCKimlikNoTextBox.Text = dt.Rows[0]["TCKimlikNo"].ToString();
    OgrenciNoTextBox.Text = dt.Rows[0]["Numara"].ToString();
    CinsiyetTextBox.Text = dt.Rows[0]["Cinsiyet"].ToString();
    DogumYeriTextBox.Text = dt.Rows[0]["DogumYeri"].ToString();
    OgrenciBilgiTR.Visible = true;
    ViewState["SecilenKisiNo"] = No;
}

.
Projemizi çalistirdigimizda ekrana Kisi tablosundaki bilgilerin bulundugu gridview gelecektir. Seç buttonuna bastigimizda olusturdugumuz tablonun seçilen Kisi bilgileri ile doldugunu görürsünüz. Ayrica grid üzeride sil butonuna bastigimiz zaman veritabaninda ilgili satir silinecek ve Grid yeniden doldurulacaktir. Simdide seç butonuna basarak textboxlara doldurdugumuz kisi bilgileri üzerinde degisiklik yaparak güncelleme islemi yapalim. Bunun için gridin üzerine ekledigimiz tabloya yeni bir satir ekleyin içine de  bir linkbuton koyun.

<tr>
    <td colspan="4" align="center">
        <asp:LinkButton ID="GuncelleLinkButton" runat="server" 
OnClick="GuncelleLinkButton_Click">Güncelle</asp:LinkButton>
    </td>
</tr>

 Link butonun Click eventi içine asagidaki kodu yazin.

protected void GuncelleLinkButton_Click(object sender, EventArgs e)
{
    int No = Convert.ToInt32(ViewState["SecilenKisiNo"].ToString());
    string conString = "Data Source=.;Initial Catalog=Ornek;
      Integrated Security=True";
    SqlConnection connection = new SqlConnection(conString);
    connection.Open();
    string comText = String.Format(@"Update Kisi set
    Ad = '{0}',
    Soyad = '{1}',
    TCKimlikNo= '{2}',
    Cinsiyet= '{3}',
    DogumYeri= '{4}',
    Numara= {5}
    where No = {6}",AdTextBox.Text,
                   SoyadTextBox.Text,
                   TCKimlikNoTextBox.Text,
                   CinsiyetTextBox.Text,
                   DogumYeriTextBox.Text,
                   OgrenciNoTextBox.Text,
                   No);
    SqlCommand command = new SqlCommand(comText,connection);
    command.ExecuteReader();
    GridDoldur();
    OgrenciBilgiTR.Visible = false;
}

Bu makalemizde Grid üzerindeki kayitlar için update,select ve delete islemlerinin nasil yapilacagina degindik. Bu islemleri yukarda anlatilanin disinda farkli yollarlada yapabiliriz. Bu tür islemlere ileriki makalelerimizde girecegiz.

27 thoughts on “GridView Kontrolü Giris – II – Seçme Güncelleme ve Silme Islemleri

  1. Selam,

    Birebir ayni kodlari ve datayi olusturdum fakat asagidaki hatayi almaktayim nasil aksion almaliyim yardimci olabilir misiniz.
    guncelle butonunda :
    command.ExecuteNonQuery(); isaret ederek asagidaki hata gelmektedir.
    “Operand type clash: int is incompatible with text”
  2. ya gridviewda seçili olan satiri silme islemini asamali anlatan kimse yok mu yaaaa… ???

  3. AutoGenerateColumns="False" diyceksin ve Columns içine template field koyup kendin olusturacaksin

  4. Merhabalar;

    Ben bu gridviewin kendi basina tablo açmasini istemiyorum.Sadece repeaterdaki gibi arasina yazdigim kodlari tekrar etsin istiyorum.

     

    Nasil yapabilirim.

  5. Bence sorun kodlarda degil mantikda bence gridview kontrolunu windows tarafda iyice insert update delete yapin daha sonra o kodlarin aynisini web tarafina yapistirin ama tek farkla..

    if(!posback)

    {

    //postback sirasinda çalismasini istediginiz metodlari buraya yaziniz örnek veriyorum

    CalisanEkle(); //burada calisan ekle metodunu postback sirasinda cagiriyorum assagidada calisan ekle metodum vvar

     

    private void CalisanEkle()

    {

    sqlconnecttion….

    sqlcommand..

    }

     

    //biliyorum c# yazdim ama bu isin mantigini anlaman içindi.

    kolay gelsin..

  6. handan hanim, bu sekilde kodunuzu anlamak gercekten zor oluyor. projenizin kod dosyasini ve aspx dosyasini mail atarsaniz inceleyebilirim.

  7. GridView1.RowDeletingDim kisi_adi As String = ds.YemekListe.Rows(e.RowIndex).Item("kisi_adi")"KisiAdi=’" & ID & "’")(0))End Sub

    ama ilk stirimda hata varmis ç&o

  8. Protected Sub GridView1_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GridView1.RowDeleting

  9. yok buton kayit bölümünde dolduruorum ama ben sql filan kullanmiorum datasource kullaniorum ve bugün arastirdiqim her yerde sadece sqlle ilgili seler var ve benm kafam çok karisti :S

     

     

    Protected Sub btn_kayit_Click(ByVal sender As Object, ByVal e As

  10. gridview page load dami dolduruyosunuz. eger pageloadda dolduruyorsaniz kodlarinizi  if(!ispostback) içine alin

  11. delete isleminde sayfa server’a gidip server’dan bilgileri alio ama bos olduqunu söylüo silmio hata verio :S

  12. E-posta aslinda yorum yazdiginiz makaleye yeni yorum geldiginde sizi bilgilendirmek için var. ama ben hala o kismi yazip siteye eklemedim 🙂

    C# dan VB ye çeviren programlari kullanablirsiniz. Ben VB den hiç anlamam 🙂

  13. anlatim gayet iyi öncelikle tsk ediim
    ancak benim söyle bir sorunum var yardimci olursaniz gerçekten çok sevinirim.
    gridview i direkt bir database e bagladigim zaman seçilen ürünün id sini diger formlardan da session araciligiyla erisebiliyorum
    ancak gridview de txtbox da aranan ürünleri gösterdigimde bu aranan ürünlerden tiklanan ürünü ürün_detay sayfasinda göstericem bunun içinde id si gerekiyor
    ama session dan çekmeye çalstigim zaman söyle bir hatayla karsilasiyoum :Object reference not set to an instance of an object.
    çözemedim
    eger yardimci olursaniz gerçekten çok sevinirim

  14. Yukaridaki kod denenerek eklenmistir. Kopyala yapistir isleminde stringlerde ki kayma problem olabilir. Örnegin string comText = String.Format(@”Update Kisi set

  15. kod kirik çalismiyor bi kontrol edip tekrar birakin küçük bi hata war o sebepten dolayi ama hatayi kendiniz bulun küçük bi kontrol yapin

Guests için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir