09 December 2016

Blog Projesi 12: Yeni Makale Ekleme Sayfası

Yeni makale ekleme sayfamızı oluşturalım. Önceden hazırladığımız Yonetim.Master adını verdiğimiz master page’i kullanacağız. Bir adet yeni Web Form Using Master Page ekleyelim ve YMakaleEkle.aspx adını verelim. Sayfanın tasarımında bir adet Makale başlığını ekleyeceğimiz textbox, bir adet içerik eklemek için CKEditor, Kategorileri listelemek için CheckBoxList, Etiketleri gireceğimiz textbox ve bir button olsun. Yani tasarımın son hali aşağıdaki şekilde olacak:

Blog Makale Ekleme Sayfası

Daha önce oluşturduğumuz database üzerinde değişiklik yaptık. Makale tablosuna bir adet Etiket kolonu ekledik.

Etiket nvarchar(500)

Daha sonra 2 adet Store procedure yazacağız.

create proc MakaleEkle
 (
 @makalebaslik nvarchar(100),
 @makaleicerik nvarchar(max),
 @etiket nvarchar(500)
 )
 as
 declare @mid int
 insert into Makale(MakaleBaslik,MakaleIcerik,Etiket) values (@makalebaslik,@makaleicerik,@etiket)
 set @mid=SCOPE_IDENTITY()
 return @mid
create proc MakaleKategoriEkle
 (
 @mid int,
 @kid int
 )
 as
 insert into MakaleKategori(MakaleID,KategoriID)
 values(@mid,@kid)

BlogDBContext.cs isimli class’ımız vardı daha önce oluşturduğumuz. Bu class’ın içine 2 tane metod yazalım:

public static int MakaleEkle(Makale m)
 {
 SqlConnection sqlcon = new SqlConnection(ConfigurationManager.ConnectionStrings["BlogConn"].ConnectionString);
 SqlCommand sqlcmd = new SqlCommand("MakaleEkle", sqlcon);
 sqlcmd.CommandType = CommandType.StoredProcedure;
 sqlcmd.Parameters.AddWithValue("@makalebaslik", m.MakaleBaslik);
 sqlcmd.Parameters.AddWithValue("@makaleicerik", m.MakaleIcerik);
 sqlcmd.Parameters.AddWithValue("@etiket", m.Etiket);
 SqlParameter returnvalue = new SqlParameter("@mid", SqlDbType.Int);
 returnvalue.Direction = ParameterDirection.ReturnValue;
 sqlcmd.Parameters.Add(returnvalue);
 sqlcon.Open();
 sqlcmd.ExecuteNonQuery();
 int mid = Convert.ToInt32(sqlcmd.Parameters["@mid"].Value);
 sqlcon.Close();
 return mid;
 }
public static void MakaleKategoriEkle(int mid, List<int> kategoriler)
 {
 for (int i = 0; i < kategoriler.Count; i++)
 {
SqlConnection sqlcon = new SqlConnection(ConfigurationManager.ConnectionStrings["BlogConn"].ConnectionString);
 SqlCommand sqlcmd = new SqlCommand("insert into MakaleKategori (MakaleID,kategoriID) values (@mid,@kid)", sqlcon);
 sqlcmd.Parameters.AddWithValue("@mid", mid);
 sqlcmd.Parameters.AddWithValue("@kid", kategoriler[i]);
 sqlcon.Open();
 sqlcmd.ExecuteNonQuery();
 sqlcon.Close();
 }
 }

Şimdi YMakaleEkle.aspx sayfamızın tasarımıza gelelim. İçerik için CkEditor ekleyeceğiz. Bu konu daha önceki notlarımda yer alıyor.

CheckBoxList’i Datasource özelliğinden direk olarak veritabanına bağlayıp kategorileri çekeceğiz. Makale eklemek için de en son butonun click olayına kodlarımızı yazacağız:

protected void MakaleEkle_Click(object sender, EventArgs e)
 {
 Makale m = new Makale();
 m.MakaleBaslik = txtMakaleBaslik.Text;
 m.MakaleIcerik = CKIcerik.Text;
 m.Etiket = txtEtiketler.Text;
 int mid = BlogDBContext.MakaleEkle(m);
List<int> kategoriler = new List<int>();
 for (int i = 0; i < CheckBoxList1.Items.Count; i++)
 {
 if (CheckBoxList1.Items[i].Selected)
 {
 int KategoriID = Convert.ToInt32(CheckBoxList1.Items[i].Value);
 kategoriler.Add(KategoriID);
 }
 }
}

Buraya kadar da veritabanına yeni makale eklemiş olduk.

Comments

  1. yurtseven says:

    rating ekleme bolumu olacak mı

  2. Arkadaşlar Lütfen Yardım Edin.

    Bir Proje üzerinde çalışıyorum.ancak CheckBoxListe eklediğim degerler veritabanında ya boş oluyor.Yada seçmedigim degerleride yazıyor.
    for (int i = 0; i <= CheckBoxList1.Items.Count – 1; )
    if (CheckBoxList1.Items[i].Selected == true)
    {

    secilen = secilen + CheckBoxList1.Items[i].Text;
    cmd.Parameters.AddWithValue("@Onfarlamba", CheckBoxList1.SelectedValue);
    cmd.Parameters.AddWithValue("@Oncam", CheckBoxList1.SelectedValue);
    cmd.Parameters.AddWithValue("@Tampon_on", CheckBoxList1.SelectedValue);
    cmd.Parameters.AddWithValue("@Onpanjur", CheckBoxList1.SelectedValue);

    }
    baglanti.Open();
    cmd.ExecuteNonQuery();
    baglanti.Close();
    Response.Redirect("Ekspertiz.aspx");

    ekle butonuna yazıyorum bunları veritabanı baglantısıda var ve çalışıyo ne yapmam lazm

  3. Meraklı says:

    Merhaba,

    Ellerinize sağlık çok yararlı bir çalışma olmuş canı gönülden tebrik ederim.Bakarak anlayarak,anlamayarak birşeyler yapmaya çalıştım.

    Diğer blogla ilgili makalelerinizide dört gözle bekliyoruz…

  4. Daha sonra 2 adet Store procedure yazacağız. nereye yazıyoruz bunu

  5. CheckboxListi şöle planliyabilirsin
    BlogDBContext.cs dosyasinda bu şekilde Kategorileri çekip

    public static List GetCategories()
    {
    List kategoriler = new List();
    SqlConnection sqlcon = new SqlConnection(ConfigurationManager.ConnectionStrings[“WeblogCon”].ConnectionString);
    SqlCommand sqlcmd = new SqlCommand(“select * from Kategori”, sqlcon);
    sqlcon.Open();
    SqlDataReader sdr = sqlcmd.ExecuteReader();
    while (sdr.Read())
    {
    Kategori k = new Kategori();
    k.KategoriID = Convert.ToInt32(sdr[0]);
    k.KategoriAciklama = sdr[1].ToString();
    k.KategoriAdi = sdr[2].ToString();

    kategoriler.Add(k);
    }
    sqlcon.Close();
    return kategoriler;
    }

    Ardından page in loadinda

    protected void Page_Load(object sender, EventArgs e)
    {
    CheckBoxList1.DataValueField = “KategoriID”;
    CheckBoxList1.DataTextField = “KategoriAciklama”;
    CheckBoxList1.DataSource = BlogDBContext.GetCategories();
    CheckBoxList1.DataBind();
    }
    şekilnde bind edebilirsin.

  6. Merhaba;
    Özenle hazırlanan bir eğitim olduğu için öncelikle çok teşekkür ederim. yanlız yazi.aspx sayfasında açılan sayfada burada şua nasıl yorum yapabiliyosak bu şekilde bir yorum sayfası nasıl eklebilirim yazıların altına

  7. DarkLord says:

    yani tam olarak nasıl bir yazmam lazım

  8. DarkLord says:

    Merhaba;
    CheckBoxList1 nasıl dolduruyoruz boş geliyor bu durumda

  9. çok beğendim teşekkürler… blog projesi kategorisinde ilk konudan son konuya kadar tüm sayfaları pc’ye kaydettim. 12 son mu devamı gelcek mi?