Diğer 4 konuda GridView kullanımının ayrıntılarını görmüştük. (konu1, konu2, konu3, konu4) Şimdi son olarak GridView içine diğer nesneleri yerleştirip veri tabanı ile ilişkilendirelim.Bu anlatılanlar Wizardlar kullanılarak yapılabilsede kullandıpımız veritabanı MySQL olduğu için mecbur yazmak en sağlamı ve en etkili yolu. 4. konu anlatımından farklı olarak kodumuzda değişenler;

Not: Kullandığım alandal tablosunda alanno(otomatik sayı), kod(sayı), alan(metin), dal(metin), sef(metin)  

  • gridview1.aspx dosyasındaki GridView122 nesnesinde değişenler ve mutlak önemli olanlar;
  • DataKeyNames=”alanno”:Satır Seçimlerinde baz alınacak alan
  • <asp:dropdownlist id=”dbEditAlanAdi” runat=”server” Visible=”true”></asp:dropdownlist>:edit butonuna basıldığında açılır kutu aşağıdaki kodlarla dolacak.
  • <asp:Label id=”lblEditAlanAdi” runat=”server” Visible=”false”
    Text='<%# DataBinder.Eval(Container, “DataItem.alan”) %>’>
    </asp:Label>:Buradaki Gizli label aslında veritabanında kayıtlı olan değeri tutuyor ve kod içinde açılır kutuya kaynak olarak seçili olan olmasını sağlıyoruz.
  • <asp:dropdownlist id=”dbaddAlanAdi” runat=”server” Visible=”true”>
    </asp:dropdownlist>:Yeni kayıt ekleme satırında bulunacak nesne kod bölümünde doldurulacak.
  • gridview1.aspx dosyası;

<asp:GridView ID=”GridView122″ runat=”server” ShowFooter=”True” DataKeyNames=”alanno”
onrowcancelingedit=”GridView122_RowCancelingEdit”
onrowediting=”GridView122_RowEditing”
onrowupdating=”GridView122_RowUpdating”
onrowdeleting=”GridView122_RowDeleting” AutoGenerateColumns=”False”
onrowcommand=”GridView122_RowCommand”
onrowdatabound=”GridView122_RowDataBound”>

<Columns>
<asp:TemplateField HeaderText=”Alan No”>
<ItemTemplate>
<asp:LinkButton id=”lblAlanNo” runat=”server” Text='<%# DataBinder.Eval(Container, “DataItem.alanno”) %>’></asp:LinkButton>
</ItemTemplate>
<EditItemTemplate>
<asp:Label id=”lblEditAlanNo” size=”5″ runat=”server” Text='<%# DataBinder.Eval(Container, “DataItem.alanno”) %>’></asp:Label>
</EditItemTemplate>
<FooterTemplate>
<asp:Label id=”lblAddAlanNo” size=”5″ runat=”server”></asp:Label>
</FooterTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText=”Alan Kod”>
<ItemTemplate>
<asp:Label id=”lblAlanKod” runat=”server” Text='<%# DataBinder.Eval(Container, “DataItem.kod”) %>’></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox id=”txtEditAlanKod” size=”5″ runat=”server” Text='<%# DataBinder.Eval(Container, “DataItem.kod”) %>’></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox id=”txtAddAlanKod” size=”5″ runat=”server”></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText=”Alan Adı”>
<ItemTemplate>
<asp:Label id=”lblAlanAdi” runat=”server” Text='<%# DataBinder.Eval(Container, “DataItem.alan”) %>’></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:dropdownlist id=”dbEditAlanAdi” runat=”server” Visible=”true”></asp:dropdownlist>
<asp:Label id=”lblEditAlanAdi” runat=”server” Visible=”false”
Text='<%# DataBinder.Eval(Container, “DataItem.alan”) %>’>
</asp:Label>
</EditItemTemplate>
<FooterTemplate>
<asp:dropdownlist id=”dbaddAlanAdi” runat=”server” Visible=”true”>
</asp:dropdownlist>
</FooterTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText=”Dal Adı”>
<ItemTemplate>
<asp:Label id=”lblDalAdi” runat=”server” Text='<%# DataBinder.Eval(Container, “DataItem.dal”) %>’></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox id=”txtEditDalAdi” runat=”server” Text='<%# DataBinder.Eval(Container, “DataItem.dal”) %>’></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox id=”txtAddDalAdi” runat=”server”></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText=”Dal Şefi”>
<ItemTemplate>
<asp:Label id=”lblAlanDalSefi” runat=”server” Text='<%# DataBinder.Eval(Container, “DataItem.sef”) %>’></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox id=”txtEditDalSefi” runat=”server” Text='<%# DataBinder.Eval(Container, “DataItem.sef”) %>’></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox id=”txtAddDalSefi” runat=”server”></asp:TextBox>
<asp:Button id=”btnAdd” runat=”server” Text=”Add” CommandName=”Add”></asp:Button>
</FooterTemplate>
</asp:TemplateField>
<asp:CommandField HeaderText=”Düzenle” ShowEditButton=”True” />
<asp:CommandField HeaderText=”Satır Sil” ShowDeleteButton=”True” />
</Columns>
</asp:GridView>

  • gridview1.aspx.cs dosyası değişenler ve önemli ayrıntılar;

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using MySql.Data.MySqlClient;
using System.Collections.Generic;
using System.Linq;
using MySql.Data;//proje adına sag tıklayarak Add Reference seçeneğinden .NET sekmesinden MySQL.Data eklenecek

public partial class gridview1 : System.Web.UI.Page
{
MySqlConnection baglanti;
MySqlCommand sqlkomut;
ListItem defValue = new ListItem();//açılır kutulara eklenecek elemanlar için
ListItem defValue3 = new ListItem();
protected void Page_Load(object sender, EventArgs e)
{
baglantifonk();//MySQL Bağlantı kodları
if (!Page.IsPostBack)//sayfa ilk çalıştığında GridViewi doldurma
{
GridView122.ShowFooter = true;
gridviewdoldur();

}

}
protected void baglantifonk()//sık sık kullanacağımız MySQL Bağlantısı kodları fonksiyon olarak yazdık
{
String baglantistringi;
baglantistringi = “Server=localhost;User Id=root; Password=1parola0; Database=yogaltim_db; Pooling=false”;
baglanti = new MySqlConnection(baglantistringi);
baglanti.Open();
}

protected void gridviewdoldur()//GridView nesnesi doldurma fonksiyonu
{
String strSQL;
strSQL = “SELECT alanno,kod,alan,dal,sef FROM alandal “;

MySqlDataReader dtReader;
sqlkomut = new MySqlCommand(strSQL, baglanti);
dtReader = sqlkomut.ExecuteReader();

GridView122.DataSource = dtReader;
GridView122.DataBind();

dtReader.Close();
dtReader = null;

}
protected void Page_UnLoad()//sayfa kapatıldığında bağlantıyı sonlandırma
{
baglanti.Close();
baglanti = null;
}

protected void GridView122_RowEditing(object sender, GridViewEditEventArgs e)//Gridview122 edit butonuna basıldığında
{
GridView122.EditIndex = e.NewEditIndex;//gridviewde tıklanan satır güncelleme modunda gözükecek
GridView122.ShowFooter = false;//gridwiev ekleme satırı gözükmeyecek
gridviewdoldur();
}
protected void GridView122_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)//Gridview122 edit butonuna basıldıktan sonra cancel butonuna basılırsa.
{
GridView122.EditIndex = -1;//gridview güncelleme satırı modundan çıkacak
GridView122.ShowFooter = true;//gridwiev ekleme satırı gözükecek
gridviewdoldur();
}
protected void GridView122_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
//*** txtEditAlanKod ***//
TextBox txtEditAlanKod = (TextBox)GridView122.Rows[e.RowIndex].FindControl(“txtEditAlanKod”);
//*** dbEditAlanAdi ***//
DropDownList dbEditAlanAdi = (DropDownList)GridView122.Rows[e.RowIndex].FindControl(“dbEditAlanAdi”);
//*** txtEditDalAdi ***//
TextBox txtEditDalAdi = (TextBox)GridView122.Rows[e.RowIndex].FindControl(“txtEditDalAdi”);
//*** txtEditDalSefi ***//
TextBox txtEditDalSefi = (TextBox)GridView122.Rows[e.RowIndex].FindControl(“txtEditDalSefi”);
String strSQL;
strSQL = “UPDATE alandal SET” +
” kod= ” + txtEditAlanKod.Text +
” ,alan = ‘” + dbEditAlanAdi.Text + “‘ ” +
” ,dal = ‘” + txtEditDalAdi.Text + “‘ ” +
” ,sef = ‘” + txtEditDalSefi.Text + “‘ ” +
” WHERE alanno = ” + Convert.ToString(GridView122.DataKeys[e.RowIndex].Value);
sqlkomut = new MySqlCommand(strSQL, baglanti);
sqlkomut.ExecuteNonQuery();
GridView122.EditIndex = -1;
GridView122.ShowFooter = true;
gridviewdoldur();
}
protected void GridView122_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
String strSQL;
strSQL = “DELETE FROM alandal WHERE alanno = ” + GridView122.DataKeys[e.RowIndex].Value;
sqlkomut = new MySqlCommand(strSQL, baglanti);
sqlkomut.ExecuteNonQuery();
GridView122.EditIndex = -1;
gridviewdoldur();
}

protected void GridView122_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == “Add”)
{
//*** txtAddAlanKod ***//
TextBox txtAddAlanKod = (TextBox)GridView122.FooterRow.FindControl(“txtAddAlanKod”);
//*** dbaddAlanAdi ***//
DropDownList dbaddAlanAdi = (DropDownList)GridView122.FooterRow.FindControl(“dbaddAlanAdi”);
//*** txtAddDalAdi ***//
TextBox txtAddDalAdi = (TextBox)GridView122.FooterRow.FindControl(“txtAddDalAdi”);
//*** txtAddDalSefi ***//
TextBox txtAddDalSefi = (TextBox)GridView122.FooterRow.FindControl(“txtAddDalSefi”);
String strSQL;
strSQL = “INSERT INTO alandal (kod,alan,dal,sef) ” +
” VALUES (” + txtAddAlanKod.Text + “,'” + dbaddAlanAdi.Text + “‘ ” +
” ,'” + txtAddDalAdi.Text + “‘,'” + txtAddDalSefi.Text + “‘) “;
sqlkomut = new MySqlCommand(strSQL, baglanti);
sqlkomut.ExecuteNonQuery();
gridviewdoldur();
}
}
protected void GridView122_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow) //Edit butonuna basınca açılır kutu oluşturma
{
Label lblEditAlanAdi = (Label)e.Row.FindControl(“lblEditAlanAdi”);//aynı yerde değeri tutan gizli label
DropDownList dbEditAlanAdi = (DropDownList)e.Row.FindControl(“dbEditAlanAdi”);//alan değerlerinin yükleneceği açılır kutu
if (null != dbEditAlanAdi)
{

dbEditAlanAdi.DataSource = getdataset1().Tables[0];//açılır kutuyu aşağıdaki fonksiyonu çağırarak veritabanından doldurduk
dbEditAlanAdi.DataTextField = “alan”;
dbEditAlanAdi.DataValueField = “alan”;
dbEditAlanAdi.DataBind();
//Response.Write(lblEditAlanAdi.Text);
MySqlCommand alanalkomut1 = new MySqlCommand(“select alan from alandal where alan='” + lblEditAlanAdi.Text+”‘”, baglanti);
MySqlDataReader alanoku1 = alanalkomut1.ExecuteReader();//daha önce kayıtlı verinin açılır kutuda seçili olmasını sağladık.
if (alanoku1.Read())
{
defValue3.Text = alanoku1[“alan”].ToString();
defValue3.Value = alanoku1[“alan”].ToString();
defValue3.Selected = true;
dbEditAlanAdi.Items.Add(defValue3);

}
else
{
dbEditAlanAdi.Items.Add(defValue); // eğer sistemde kayıtlı değilse  defValue’ yi dropdownlist’e ekliyoruz.
}
}

}
if (e.Row.RowType == DataControlRowType.Footer)//yeni kayıt satırında ise
{ DropDownList dbaddAlanAdi = (DropDownList)e.Row.FindControl(“dbaddAlanAdi”);//isimli liste elemanını bul
if (null != dbaddAlanAdi)
{
dbaddAlanAdi.DataSource = getdataset1().Tables[0]; //oluşsan dataset fonksiyonundan değerleri al
dbaddAlanAdi.DataTextField = “alan”;
dbaddAlanAdi.DataValueField = “alan”;
dbaddAlanAdi.DataBind();// açılır kutuya ekle
listeelemanifonk();//yeni bir liste elemanı oluşturan fonksiyon
dbaddAlanAdi.Items.Add(defValue); // Daha sonra dropdownlist’e ekliyoruz.
}
}
}
private DataSet getdataset1()//DropDownList nesnelerinin veritabanı ilişkisi
{
baglantifonk();
string strSQL = “Select alan from alandal”;
MySqlDataAdapter ad = new MySqlDataAdapter(strSQL, baglanti);
DataSet ds = new DataSet();
ad.Fill(ds);
return ds;
}
protected void listeelemanifonk() // defValue değerini oluşturan fonksiyon
{
defValue.Text = “Lütfen birini seçiniz!”; // Listede görünecek yazı
defValue.Value = “”; // Görünen isme karşılık gelen değer *SelectedValue
defValue.Selected = true; // Bunun seçili olmasını sağlıyoruz.
}
}

İnternette özellikle bu konu ile ilgili bir sürü yabancı kaynak var. Ama türkçe pek bulamadım. Yabancı kaynaklarda nedense sanki anlaşılmasın diye çok ağır ve çok tefarruata girerek anlatmışlar. Benim sadeleştirebildiğim kadarıyla GridView konusunun sonuna geldik. Bunları öğrendim. Diğer nesneler de aynı yöntemler kullanılarak eklenebilir diye düşünüyorum.

Reklamlar