Asp.NET ile Repeater’da Yukarı Aşağı Taşıma İşlemleri

Merhaba bu yazımda sizlere, Repeater kullanarak veritabanında bulunan içeriğin sıra numarasını nasıl güncelleyebileceğinizi anlatmaya çalışacağım. Ben örneğimde her zaman olduğu gibi ornek isimli MSSQL veritabanımı kullandım. Veritabanıma kategoriler isimli bir tablo oluşturdum, oluşturduğum tablonun yapısını aşağıdaki resimde görebilirsiniz.

 

Veritabanıyla olan işimizi bitirdikten sonra kolları sıvayıp programlama kısmına geçebiliriz (: Olaya başlamadan belirteyim önce Repeater'da Düzenleme, Güncelleme, Silme başlıklı yazımı okumanızda fayda var. Default.aspx sayfama 1 adet repeater, repeater'ın içerisine de 2 adet ImageButton(yukarı aşağı taşıma buttonları) ve 2 adet HiddenField ekledim.

Default.aspx

<asp:Repeater ID="Repeater1" runat="server" onitemcommand="Repeater1_ItemCommand">
<ItemTemplate>
<p><%# Eval("sira") %> -  <%# Eval("kategori") %> -   
<asp:ImageButton runat="server" ID="ImageButton1" ImageUrl="arrow_large_up.png" CommandArgument="yukari" CommandName="Repeater1_ItemCommand" ToolTip="Yukarı Taşı" />
<asp:ImageButton runat="server" ID="ImageButton2" ImageUrl="arrow_large_down.png" CommandArgument="asagi" CommandName="Repeater1_ItemCommand" ToolTip="Aşağı Taşı" />
<asp:HiddenField runat="server" ID="hdID" Value='<%# Eval("id") %>' />
<asp:HiddenField runat="server" ID="hdSira" Value='<%# Eval("sira") %>' />
</p>
<hr />
</ItemTemplate>
</asp:Repeater>

Kodlarda da gördüğünüz gibi hdID isimli hiddenfield'a id yi, hdSira isimli hiddenfield'a da sıra numarasını değer olarak atadım. Çünkü taşıma işlemi sırasında ikisine de ihtiyacımız olacak (: Gelelim default.aspx.cs yani codebehind'ımıza. Öncelikle doldur isimli bir metot yazarak, repeater a kategoriler tablomuzdaki verileri doldurduk.

Default.aspx.cs

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

public void doldur()
  { 
    baglanti.Open();
    SqlCommand cmd=new SqlCommand("Select * from kategoriler order by sira",baglanti);
    SqlDataAdapter da=new SqlDataAdapter(cmd);
    DataTable dt=new DataTable();
    da.Fill(dt);
    Repeater1.DataSource = dt;
    Repeater1.DataBind();
    baglanti.Close();
   }

Verileri listeletme işlemini yaptıktan sonra gelelim asıl işin gerçekleştiği kısıma yani onitemcommand olayındaki taşıma işlemlerimize.

Default.aspx.cs devam

protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
  {            
     if (e.CommandArgument.Equals("yukari"))
        {
          //Repeater'ın içindeki hdID isimli hiddenfield'ı bulup değerini id değişkenine atadık.
          int id = Convert.ToInt32(((HiddenField)e.Item.FindControl("hdID")).Value);      
          int sira, yeniSira;
          //Repeater'ın içindeki hdSira isimli hiddenfield'ı bulup değerini sira değişkenine atadık.
          sira = Convert.ToInt32(((HiddenField)e.Item.FindControl("hdSira")).Value);
          yeniSira= 1;//Sıra numarası en az 1 olabilir. Sıralamada en üstte duracaktır.
          //Seçilenin sıra numarası 1den büyükse, yeni sıra numarası şimdiki sıra numarasının 1 eksiği olmalıdır.
          if (sira > 1)
             yeniSira = sira - 1;

          //Seçilenden bir önceki kaydın sıra değerini artırıyoruz.
          tasi("Update kategoriler set sira=" + sira + " where sira=" + yeniSira + "");
          //Seçilen verinin sıra numarasını güncelliyoruz   
          tasi("Update kategoriler set sira=" + yeniSira + " where id=" + id + "");
          doldur();//repeater ı tekrar doldurduk.
        }

     else if (e.CommandArgument.Equals("asagi"))
        {
          //Repeater'ın içindeki hdID isimli hiddenfield'ı bulup değerini id değişkenine atadık.
          int id = Convert.ToInt32(((HiddenField)e.Item.FindControl("hdID")).Value); 
          int sira, sonSira, yeniSira;
          //Repeater'ın içindeki hdSira isimli hiddenfield'ı bulup değerini sira değişkenine atadık.
          sira = Convert.ToInt32(((HiddenField)e.Item.FindControl("hdSira")).Value);
          baglanti.Open();
          //En büyük sıra numarasını alıp, sonSira isimli değişkenimize atıyoruz.
          SqlCommand cmd = new SqlCommand("Select MAX(sira) as buyuk from kategoriler",baglanti);
          sonSira = Convert.ToInt32(cmd.ExecuteScalar());
          baglanti.Close();
          yeniSira = 0;
          /*Seçilenin sıra numarası en büyük sıra numarasından küçükse,
           * yeni sıra numaramız şimdiki sıra numarası + 1 olmalıdır */
          if (sira < sonSira)
             yeniSira = sira + 1;
          else//Küçük değilse en büyük sıra numarası değeri yeni sıra numarası değeri olmalıdır.
             yeniSira = sonSira;
          //Seçilen veriden bir sonraki kaydın sıra numarasını bir azaltıyoruz.
          tasi("Update kategoriler set sira=" + sira + " where sira=" + yeniSira + "");
          //Seçilen verinin sıra numarasını güncelliyoruz.
          tasi("Update kategoriler set sira=" + yeniSira + " where id=" + id + "");
          doldur();//repeater ı tekrar doldurduk.
      }
  }

public void tasi(string sql)
  {
    baglanti.Open();
    SqlCommand cmd = new SqlCommand("" + sql + "", baglanti);
    cmd.ExecuteNonQuery();
    baglanti.Close();
  }

Kodların üzerinde açıklamalar yaptığım için tekrar anlatmıyorum. Sıra numarası güncellemek bu kadar basit bir olay, umarım faydalı olmuştur şimdiden kolay gelsin hepinize. Örneğin gayet basit ve anlaşılır olduğunu düşünüyorum ama yinede takıldığınız bir yer olursa yorum yaparak yada iletişim bölümünü kullanarak ulaşabilirsiniz.

Sosyal Ağlarda Paylaşın

Share on Tumblr

Facebook Yorumları


Yorumlar (0)

Henüz hiç yorum yapılmamış. İlk yorumu siz yapın!

Yorum Yapın