Gridview ile İnsert, Update ve Onaylı Silme

Gridview hem yönetim paneli olsun hem kullanıcıların gezindiği sayfalar olsun çok kullanılan bir veri gösterme nesnesidir. Biz bu yazıda yönetim paneli kısmında bir makale nasıl yönetilir bu işlemi gerçekleştireceğiz. Bu işlemi çoklu sayfa kullanmak yerine tek bir sayfada yapacağız. Bu işlem sonucunda ekran görüntüsü şöyle olacak;

Bu projede kullanılmak üzere ise MakaleDb veritabanında MakaleTablo adlı bir tablo hazırladık.

Bu işlemi ADO.NET ve Entitiy ile ayrı ayrı yapalım.

1.ADO.NET ile yapalım. Şurada paylaştığım class ile veritabanı işlemlerini yapacağım.

Öncelikle  Webform projesi oluşturun ve resimler klasörüne şu resimleri kopyalayın.

 

Web formumuzu tasarlayalım.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit.HTMLEditor" TagPrefix="cc1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function SimedenOnceOnay() {
            if (!confirm("Kaydı Silmek istediğinizden Emin misiniz ?")) {
                return false;
            }
        }
    </script>
</head>
<body style="font: 11pt Calibri">
    <form id="form1" runat="server">
        <div>
            <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
            <asp:Panel ID="Panel2" runat="server">
                <h2>Makale Yönetim Sayfası</h2>
                Makale Başlığı:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <asp:TextBox ID="basliktxt"
                    runat="server" Width="400px"></asp:TextBox><br />
                <br />
                Makale Kategorisi:<asp:DropDownList ID="kategoridrp" runat="server"
                    Height="20px" Width="200px">
                    <asp:ListItem>ASP.NET</asp:ListItem>
                    <asp:ListItem>AJAX</asp:ListItem>
                    <asp:ListItem>CSharp</asp:ListItem>
                    <asp:ListItem>VB.NET</asp:ListItem>
                    <asp:ListItem>HTML</asp:ListItem>
                    <asp:ListItem>CSS</asp:ListItem>
                    <asp:ListItem>MVC</asp:ListItem>
                </asp:DropDownList><br />
                Makale İçeriği:<br />
                <cc1:Editor ID="Editor1" runat="server" />
                <br />
                Yayın Durumu:<asp:CheckBox ID="aktifchk" runat="server" /><br />
                <asp:Button ID="Button1" runat="server" Text="Yeni Makale Kaydet" OnClick="Button1_Click" />
            </asp:Panel>
        </div>
        <div>
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="id" DataSourceID="SqlDataSource1" BackColor="White"
                BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px" CellPadding="3"
                GridLines="Horizontal"
                Width="100%" Font-Names="Calibri"  OnRowCommand="GridView1_RowCommand">
                <FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
                <AlternatingRowStyle BackColor="#F7F7F7" />
                <RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" />
                <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
                <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />
                <Columns>
                    <asp:BoundField DataField="Mbaslik" HeaderText="Makale Başlığı" SortExpression="Mbaslik" />
                    <asp:BoundField DataField="Mkategori" HeaderText="Makale Kategorisi" SortExpression="Mkategori" />
                    <asp:BoundField DataField="Mdetay" HeaderText="Makale Detay" SortExpression="Mdetay" />
                    <asp:BoundField DataField="Monay" HeaderText="Yayın Durumu" SortExpression="Monay" />
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:ImageButton ID="ImageButton2" runat="server" CommandName="duzen" CommandArgument='<%#Eval("id") %>' ToolTip="Kaydı Düzenle" ImageUrl="resimler/duzenle.gif" Width="20" Height="20" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:ImageButton ID="ImageButton1" runat="server" CommandName="sil" CommandArgument='<%#Eval("id") %>' OnClientClick="return SimedenOnceOnay();" ToolTip="Kaydı Sil" ImageUrl="resimler/sil.gif" Width="20" Height="20" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:MakaleDbConnectionString %>" SelectCommand="SELECT * FROM [MakaleTablo]">
            </asp:SqlDataSource>
        </div>
    </form>
</body>
</html>
Tasarımda görüldüğü üzere AjaxControlToolkit Editor nesnesini kullandım. AjaxControlToolkiti bu makalenin sonundaki linkten indirebilirsiniz. Gridviewin veritabanı bağlantısını SqldataSource ile yaptım ve İki adet TemplateField ekleyip, birini düzenleme, diğerini silme işlemi için kullandım. Burada dikkat etmeniz gerek olay imagebutton nesnesinin Commandargument ve Commandname özelliğidir. İmageButton yerine LinkButton ve Normal butonda kullanabilirdiniz.
Şimdi kodlama bölümüne geçelim ve şu kodları yazalım.
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
       
    }
    Fonksiyonlar fnk = new Fonksiyonlar();//Yukarda belirttiğim fonksiyon App_Code klasöründe fonksiyonlar.cs isminde oluşturdum.
    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "sil")
        {
            fnk.CmdSorgu("DELETE FROM MakaleTablo WHERE id=" + e.CommandArgument.ToString());
            Response.Redirect("Default.aspx");
        }
        if (e.CommandName == "duzen")
        {
            Button1.Text = "Düzenlenen Makaleyi Kaydet";
            DataRow veriler = fnk.SatirGetir("SELECT * FROM MakaleTablo WHERE id=" + e.CommandArgument.ToString());
            basliktxt.Text = veriler["Mbaslik"].ToString();
            kategoridrp.SelectedItem.Text = veriler["Mkategori"].ToString();
            Editor1.Content = veriler["Mdetay"].ToString();
            string  durum = veriler["Monay"].ToString();
            if (durum == "1")
            {
                aktifchk.Checked = true;
            }
            else
            {
                aktifchk.Checked = false;
            }
            Session["id"] = e.CommandArgument.ToString();
            Session["Durum"] = "1";
        }

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        string yayin = "";
        if (aktifchk.Checked)
        {
            yayin = "1";
        }
        else
        {
            yayin = "0";
        }
        if (Session["durum"].ToString() == "1")
        {
            fnk.CmdSorgu("UPDATE MakaleTablo SET Mbaslik='" + basliktxt.Text + "', Mkategori='" + kategoridrp.Text + "', Mdetay='" + Editor1.Content + "', Monay='" + yayin + "'  WHERE id=" + Session["id"]);
            Session["Durum"] = "0";
            Response.Redirect("Default.aspx");
        }
        else
        {
            Button1.Text = "Yeni Makale Kaydet";
            Session["durum"] = "0";
            fnk.CmdSorgu("insert into MakaleTablo (Mbaslik,Mdetay,Mkategori,Monay) values('"+ basliktxt.Text +"','"+  Editor1.Content +"','"+ kategoridrp.Text +"','"+ yayin  +"')");
            Response.Redirect("Default.aspx");
        }
    }
}

2.Entitiy ile; modelimizi oluşturalım ve tasarımı şöyle yapalım;

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default2.aspx.cs" Inherits="_Default" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit.HTMLEditor" TagPrefix="cc1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function SimedenOnceOnay() {
            if (!confirm("Kaydı Silmek istediğinizden Emin misiniz ?")) {
                return false;
            }
        }
    </script>
</head>
<body style="font: 11pt Calibri">
    <form id="form1" runat="server">
        <div>
            <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
            <asp:Panel ID="Panel2" runat="server">
                <h2>Makale Yönetim Sayfası</h2>
                Makale Başlığı:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <asp:TextBox ID="basliktxt"
                    runat="server" Width="400px"></asp:TextBox><br />
                <br />
                Makale Kategorisi:<asp:DropDownList ID="kategoridrp" runat="server"
                    Height="20px" Width="200px">
                    <asp:ListItem>ASP.NET</asp:ListItem>
                    <asp:ListItem>AJAX</asp:ListItem>
                    <asp:ListItem>CSharp</asp:ListItem>
                    <asp:ListItem>VB.NET</asp:ListItem>
                    <asp:ListItem>HTML</asp:ListItem>
                    <asp:ListItem>CSS</asp:ListItem>
                    <asp:ListItem>MVC</asp:ListItem>
                </asp:DropDownList><br />
                Makale İçeriği:<br />
                <cc1:Editor ID="Editor1" runat="server" />
                <br />
                Yayın Durumu:<asp:CheckBox ID="aktifchk" runat="server" /><br />
                <asp:Button ID="Button1" runat="server" Text="Yeni Makale Kaydet" OnClick="Button1_Click" />
            </asp:Panel>
        </div>
        <div>
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="id" BackColor="White"
                BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px" CellPadding="3"
                GridLines="Horizontal"
                Width="100%" Font-Names="Calibri" OnRowCommand="GridView1_RowCommand">
                <FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
                <AlternatingRowStyle BackColor="#F7F7F7" />
                <RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" />
                <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
                <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />
                <Columns>
                    <asp:BoundField DataField="Mbaslik" HeaderText="Makale Başlığı" SortExpression="Mbaslik" />
                    <asp:BoundField DataField="Mkategori" HeaderText="Makale Kategorisi" SortExpression="Mkategori" />
                    <asp:BoundField DataField="Mdetay" HeaderText="Makale Detay" SortExpression="Mdetay" />
                    <asp:BoundField DataField="Monay" HeaderText="Yayın Durumu" SortExpression="Monay" />
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:ImageButton ID="ImageButton2" runat="server" CommandName="duzen" CommandArgument='<%#Eval("id") %>' ToolTip="Kaydı Düzenle" ImageUrl="resimler/duzenle.gif" Width="20" Height="20" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:ImageButton ID="ImageButton1" runat="server" CommandName="sil" CommandArgument='<%#Eval("id") %>' OnClientClick="return SimedenOnceOnay();" ToolTip="Kaydı Sil" ImageUrl="resimler/sil.gif" Width="20" Height="20" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        </div>
    </form>
</body>
</html>
Tasarımda fark olarak Sqldatasource kullanılmamıştır.
Şimdi kodlama bölümüne geçelim;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    MakaleDbEntities db = new MakaleDbEntities();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)//EnableEventValidation="true" hatasını engellemek için.
        {
            GridView1.DataSource = db.MakaleTablo.ToList();//Makale Tablosunu gridviewin veri kaynağı olarak belirledik.
            GridView1.DataBind();//Verileri gösterdik.
        }
    }
    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        int deger = Convert.ToInt32(e.CommandArgument);//Kaydın id değerini aldık.
        if (e.CommandName == "sil")//Kaynak bölümünde Kaydın Commandname sil ise kaydı sil işlemini yap.
        {
            var silkayit = db.MakaleTablo.Where(x => x.id == deger).FirstOrDefault();
            db.MakaleTablo.Remove(silkayit);
            db.SaveChanges();
            Response.Redirect("Default.aspx");
        }
        if (e.CommandName == "duzen")//Kaynak bölümünde Kaydın Commandname duzen ise kaydı düzenleme işlemini yap.
        {
            Button1.Text = "Düzenlenen Makaleyi Kaydet";//Commandname duzen ise Butonda gözükecek ifade.
            var guncelle = db.MakaleTablo.Where(x => x.id == deger).FirstOrDefault(); ;
            basliktxt.Text = guncelle.Mbaslik.ToString();
            kategoridrp.SelectedItem.Text = guncelle.Mkategori.ToString();
            Editor1.Content = guncelle.Mdetay.ToString();
            string durum = guncelle.Monay.ToString();
            if (durum == "1")//Durum bilgisine göre chechbox işaretli yada işaretsiz olsun  ayarını yaptık.
            {
                aktifchk.Checked = true;
            }
            else
            {
                aktifchk.Checked = false;
            }
            Session["id"] = e.CommandArgument.ToString();//Duzenlenecek kaydın id sini sessionda sakladık.
            Session["Durum"] = "1";//Yeni kayıt veya düzenlememi yapılacak ayırt etmek için kullacağız.
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        int deger = Convert.ToInt32(Session["id"]);//Düzen bölümünden Session ile glen kayıt idsini deger değişkenine aktardık.
       string yayin = "";
        if (aktifchk.Checked)//Checkbox işaretli ise 1 değilse 0 olsun isdedik ve bu değerleri veritabanına yazacağız.
        {
            yayin = "1";
        }
        else
        {
            yayin = "0";
        }
        if (Session["durum"].ToString() == "1")//Eğer düzenleme butonuna tıklanmışsa güncelleme bölümü çalışacak
        {
            var guncelle = db.MakaleTablo.Where(c => c.id == deger).FirstOrDefault();
            guncelle.Mbaslik = basliktxt.Text;
            guncelle.Mkategori = kategoridrp.Text;
            guncelle.Mdetay = Editor1.Content;
            guncelle.Monay = yayin;
            db.SaveChanges();
            Session["Durum"] = "0";
            Response.Redirect("Default.aspx");
        }
        else// değilse yeni kayıt çalışacak
        {
            Button1.Text = "Yeni Makale Kaydet";//Yeni kayıt ise bu ifade gözüksün 
            Session["durum"] = "0";
            MakaleTablo ekle = new MakaleTablo();
            ekle.Mbaslik = basliktxt.Text;
            ekle.Mkategori = kategoridrp.Text;
            ekle.Mdetay = Editor1.Content;
            ekle.Monay = yayin;
            db.MakaleTablo.Add(ekle);
            db.SaveChanges();
            Response.Redirect("Default.aspx");
        }
    }
}
Entity ile işlem bu şekilde faydalı olması dileğiyle.


Etiketler
Ekle Sil insert update Güncelle Confirm Onay
Mesaj Yaz