ASP.Net Repeater içindeki nesneye ulaşmak ve Code Behind'da HTML Elementine Css Atamak

ASP.Net Repeater içindeki nesneye ulaşmak ve Code Behind'da HTML Elementine Css Atamak

ASP.Net Repeater içindeki nesneye ulaşmak ve Code Behind'da HTML Elementine Css Atamasının nasıl yapıldığını görelim.

Selamlar,

Bu derste anlatacağım uygulamayı yeni başladığım bir yönetim panelinde uyguladım ve başarılı oldum :) Umarım sizler içinde faydalı olur.

aspx sayfasındaki kodlarım.

<asp:Repeater ID="RP_MESAJLAR" runat="server">                                  
                                    <ItemTemplate>
                                        <li>

                                            <div class="task-checkbox">
                                                <input type="checkbox" id="CHK_isaret" runat="server" class="flat-grey" />
                                            </div>

                                            <div class="task-title">
                                                <span class="label label-danger">Tarih: <%#Eval("TARİH")   %></span>
                                                <br />

                                                <strong>Mesaj :  </strong>
                                                <span runat="server" id="sp1" class="task-title-sp"><%#Eval("MESAJ")   %></span>
                                                <br />

                                                <span runat="server" id="sp2" class="task-title-sp label label-primary">Firma: <%#Eval("FIRMA")   %></span>
                                                <strong>| </strong>
                                                <span runat="server" id="sp3" class="task-title-sp  label label-primary">Web Site: <%#Eval("WEBSITE")   %></span>
                                                <strong>| </strong>
                                                <span runat="server" id="sp4" class="task-title-sp  label label-primary">Email: <%#Eval("EMAİL")   %>  </span>

                                                <div class="pull-right hidden-phone">                                                  
                                                    <a href='<%# String.Format("Mesajlar.aspx?id={0}&islem=Okundu", Eval("KAYITNO")) %>' runat="server" id="a_okundu" title="Okundu Olarak İşaretle" class="btn btn-default btn-xs"><i class="fa fa-check"></i></a>
                                                    <a href='<%# String.Format("Mesajlar.aspx?id={0}&islem=Sil" , Eval("KAYITNO")) %>' runat="server" id="a_sil" title="Sil" class="btn btn-default btn-xs"><i class="fa fa-times"></i></a>
                                                </div>
                                            </div>
                                        </li>
                                    </ItemTemplate>
                                </asp:Repeater>

bir HTML elementine Code Behind da ulaşmak istiyorsanız mutlaka o elemente 

runat="server" ve  id="ID" 

ifadelerini eklemek zorundasınız. Aksi takdirde bu elemente Code Behind kısmından ulaşamazsınız.

-----------

NOT:

<div class="pull-right hidden-phone">                                                  
   <a href='<%# String.Format("Mesajlar.aspx?id={0}&islem=Okundu", Eval("KAYITNO")) %>' runat="server" id="a_okundu" title="Okundu Olarak İşaretle" class="btn btn-default btn-xs"><i class="fa fa-check"></i></a>
   <a href='<%# String.Format("Mesajlar.aspx?id={0}&islem=Sil" , Eval("KAYITNO")) %>' runat="server" id="a_sil" title="Sil" class="btn btn-default btn-xs"><i class="fa fa-times"></i></a>
</div>

Bu kısımda dikkat etmeniz gereken birşey var. Bir "a" tagına -runat="server"- eklediğinizde href="" varsa hata verecektir. Bu yüzden yukarıda gördüğünüz String.Format() kullanarak yapmalı ve link'i tek tırnak( '  ' ) içinde almalısınız

-----------

Ama şuan yukarıdaki koda baktığımız zaman nesneler ve elementler bir Repeater kontrolünün içerisinde duruyor. Bu yüzden de Code Behind'da bu nesnelere ulaşamayız. Bu nesnelere ulaşmak için Repeater'in FindControl() özelliğinden faydalanacağız.

Code Behind

using System.Web.UI.HtmlControls;
//bunu eklemeyi unutmayın 

protected void Page_Load(object sender, EventArgs e)
    {
        DataTable dt = sql.ShowTable("SELECT * FROM dbo.MesajlariGetir('')");
        RP_MESAJLAR.DataSource = dt;
        RP_MESAJLAR.DataBind();
        //repeater i  dolduruyoruz.

        for (int i = 0; i < dt.Rows.Count; i++)
        {
            var chk = (HtmlInputCheckBox)RP_MESAJLAR.Items.FindControl("CHK_isaret");
            // ID'si CHK_isaret olan controlü bulup alıyoruz.
            // Bu control windows yada devexpress controlü olmadığından "var" ile alıyoruz
            // diğer şekilde CheckBox(windows) ASPxCheckBox(devexpress) olarak alırdık. 
            var sp1 = (HtmlContainerControl)RP_MESAJLAR.Items.FindControl("sp1");
            var sp2 = (HtmlContainerControl)RP_MESAJLAR.Items.FindControl("sp2");
            var sp3 = (HtmlContainerControl)RP_MESAJLAR.Items.FindControl("sp3");
            var sp4 = (HtmlContainerControl)RP_MESAJLAR.Items.FindControl("sp4");
            var a_okundu = (HtmlAnchor)RP_MESAJLAR.Items.FindControl("a_okundu");
            var a_cevapla = (HtmlAnchor)RP_MESAJLAR.Items.FindControl("a_cevapla");

            // yukarıdaki namespace bu kontrollere ulaşabilmek için

            if (dt.Rows["GÖRÜLDÜ"].ToString() == "1")
            {
                // mesaj okunduysa 
                chk.Checked = true;
                sp1.Style.Add("text-decoration", "line-through");
                sp2.Style.Add("text-decoration", "line-through");
                sp3.Style.Add("text-decoration", "line-through");
                sp4.Style.Add("text-decoration", "line-through");
                sp1.Style.Add("color", " #bbbbbb");
                sp2.Style.Add("color", " #bbbbbb");
                sp3.Style.Add("color", " #bbbbbb");
                sp4.Style.Add("color", " #bbbbbb");

                a_okundu.Style.Add("background", " #f05050");
                //Mesaj bilgisinin üzerini çizecek ve rengini değiştirecek
                //ve okundu olarak işaretle butonunun bg rengini değiştirecek.             

            }            
        }
    }

Page_Load eventi içerisinde gördüğünüz gibi Repeater'in FindControl() özelliği ile nesnelere ulaşıp istediğimiz css atamasını yapmış olduk.

Bu sayfada kullandığımız CheckBox bir windows nesnesi değil yani bir HTML kontrolüdür. Code Behind'a yukarıdaki namespace'i eklemezseniz hata verecektir. Bu şekilde  kullanmamın sebebi ise windows yada devexpress checkbox'una istediğim css leri uygulayamamış olmamdır ama sonuçta bu şekilde de amacıma ulaşmış oldum.

Umarım faydalı olmuştur..

Mustafa BÜKÜLMEZ
Web sitesi, ERP, MRP, CRM ve kişiye özel uygulamalar hazırlanır. -- Deneyip çalıştığını onaylamadan çok nadir ders eklerim. Denemediklerim ise eski makalelerimdendir. Hem bildiklerimi paylaşmak hemde her seferinde aramamak için yayınlıyorum. -- *Bilgi paylaştıkça çoğalır. *Bir mum diğer mumu yakmakla ışığından bir şey kaybetmez. Aksine Daha çok ışık yayar. -- 1992 İstanbul doğumluyum. Kahramanmaraş'ta yaşıyorum. Lise: Ağ sistemleri ve Yönetimi, Üniversite: Bilgisayar Programcılığı.. -- 07.2014 tarihinden beri bir firmada Bilgi İşlem Müdürü olarak çalışmaktayım. -- Kişisel Bloğum : https://csharpiledundenbugune.blogspot.com.tr/
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

Yukarı Git