none
ASP.net Repeater mantık sorusu RRS feed

  • Soru

  • merhaba,
    yazmakta olduğum siteme nöbetçi eczaneleri eklemek istiyorum ama mantık konusunda bir noktada takıldım.

    eczaneler tablom ve nobetci eczaneler tablom var.
    eczaneler tablosunda eczanelerin bilgileri kayıtlı. nöbetçi eczaneler tablosunda ise eczanelerin id'si ve nöbet tarihi kayıtlı.
    şimdi ben sistemden nöbetçi eczaneyi girdiğim zaman tarihi gelince o eczaneler gözükecek burada sıkıntı yok ama nöbetçi eczaneleri listeletme konusunda sıkıntım var.

    listeleme örneği verecek olursak yapmak istediğim;

    ------Bodrum
    -a eczanesi
    -b eczanesi
    -c eczanesi
    ------marmaris
    x eczanesi 
    y exzanesi

    gibi. ama her zaman her ilçede nöbetçi eczane olmuyor. bu yüzden sadece nöbetçisi olan ilçeleri göstermem lazım.

    mantık olarak şöyle bir şey denedim;
    nöbetçi olan eczanelerin id'lerinden hangi bölgede olduklarını group by  metoduyla grupladım. bu bana hangi ilçelerde nöbetç ieczaneler olduğunu verdi.
    bir tane repeater oluşturdum ve bunu yazdırdım. bize ne döndü;

    ------marmaris
    ------bodrum
    ------seydikemer
    şimdi ise bunların aralarına o ilçenin nöbetçi eczanelerini yazdırmam lazım.
    yani iç içe repeater kullanmam gerekiyor.
    ama bu içte kalan repeater'a nasıl bir cümle yazayım ki kod akışı şöyle olsun;

    -ilçeyi yazdır
    -yazdırdığın ilçenin eczanelerini doldur
    -ilçeyi yazdır
    -yazdırdığın ilçenin eczanelerini doldur.

    kendi yazdığım kodda ilçeleri yazdırıp  altına eczaneleri yazdırabiliyorum ama bütün ilçelerin eczanelerini yazdırıyor. amacım yazdırdığım ilçelerin altına sadece o ilçenin eczanelerini göstermek


    ilçe sayısına göre ve ilçedeki nöbetçi eczane sayısına göre bu görüntü çoğalacak.
    umarım derdimi anlatabilmişimdir.


    19 Ocak 2015 Pazartesi 11:24

Yanıtlar

  • O zaman sql sorgunuzda bir sorun var demektir. Siz 2. repeater'a parametreyi nasıl ekliyorsunuz ? Mesela IlceID alanında bir kolon olduğunu varsayarsak;

     protected void rpt_Ilceler_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            Repeater rp = (Repeater)e.Item.FindControl("rptEczaneler");
            //Sql bağlantını oluşturduğunu varsayıyorum.
      SqlCommand cmdNobetci = new SqlCommand("Select * from NobetciEczaneler where IlceID=@IlceID and NobetTarihi = GetDate()", baglanti);
            cmdNobetci.Parameters.AddWithValue("@IlceID",Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, "IlceID").ToString()
            rp.DataSource = cmdAltKat.ExecuteReader();
            rp.DataBind();
        }

    Tabi burada tablo yapınızı bilmediğimden değerleri kendim uydurdum. Siz kendinize göre düzenlersiniz.


    İletişim

    • Yanıt Olarak İşaretleyen KaanOZTRK 19 Ocak 2015 Pazartesi 17:17
    19 Ocak 2015 Pazartesi 12:10
    Moderatör

Tüm Yanıtlar

  • İlçeye ait nöbetçileri çekmen için Ana Repeater'ının ItemDataBound event'ına bu kodları yazman gerek. 

    <asp:Repeater ID="rptIlceler" runat="server">
    <ItemTemplate>
      <%#Eval("IlceAdi") %>
      <br />
      <asp:Repeater ID="rptEczaneler" runat="server">
          <ItemTemplate>
            <%#Eval("EczaneBilgileri") %>
              <br />
          </ItemTemplate>
      </asp:Repeater>
    </ItemTemplate>
    </asp:Repeater>

    Yukarıdaki gibi bir iç içe repeater eklediğini varsayalım. ItemTemplate kısımlarını sen kendine göre düzenlersin. Daha sonra CS tarafında ise 

     protected void rptIlceler_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            Repeater rp = (Repeater)e.Item.FindControl("rptEczaneler");
            //Sql Kodlarını yazdın ve veriyi çektiğini varsayıyorum.
            rp.DataSource= dt; //DAtaSource verdin.
            rp.DataBind(); //Veriyi bağladın.
        }

    İç içe repeater kullanımı bu şekilde.


    İletişim


    19 Ocak 2015 Pazartesi 11:44
    Moderatör
  • İlçeye ait nöbetçileri çekmen için Ana Repeater'ının ItemDataBound event'ına bu kodları yazman gerek. 

    <asp:Repeater ID="rptIlceler" runat="server">
    <ItemTemplate>
      <%#Eval("IlceAdi") %>
      <br />
      <asp:Repeater ID="rptEczaneler" runat="server">
          <ItemTemplate>
            <%#Eval("EczaneBilgileri") %>
              <br />
          </ItemTemplate>
      </asp:Repeater>
    </ItemTemplate>
    </asp:Repeater>

    Yukarıdaki gibi bir iç içe repeater eklediğini varsayalım. ItemTemplate kısımlarını sen kendine göre düzenlersin. Daha sonra CS tarafında ise 

     protected void rpt_Ilceler_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            Repeater rp = (Repeater)e.Item.FindControl("rptEczaneler");
            //Sql Kodlarını yazdın ve veriyi çektiğini varsayıyorum.
            rp.DataSource= dt; //DAtaSource verdin.
            rp.DataBind(); //Veriyi bağladın.
        }

    İç içe repeater kullanımı bu şekilde.


    İletişim

    aynı bu şekilde yaptım. iç içe repeater kullandım fakat içteki repeater'in cümlesinde mantık hatası yaptım sanırım.
    dış döngü bana ilçeyi getirdi. iç döngüye girip eczane bilgilerini getirdi fakat bodrum'un altına marmais in eczaneleri de geldi.

    benim ihtiyacım olan; dış döngü hangi ilçenin ismini getirdiyse iç döngüde o ilçenin kayıtları gelsin.
    yani dış döngüde gelen ilçe değerini iç döngüde WHERE komutu ile kontrol ettirmem lazım.

    19 Ocak 2015 Pazartesi 11:49
  • O zaman sql sorgunuzda bir sorun var demektir. Siz 2. repeater'a parametreyi nasıl ekliyorsunuz ? Mesela IlceID alanında bir kolon olduğunu varsayarsak;

     protected void rpt_Ilceler_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            Repeater rp = (Repeater)e.Item.FindControl("rptEczaneler");
            //Sql bağlantını oluşturduğunu varsayıyorum.
      SqlCommand cmdNobetci = new SqlCommand("Select * from NobetciEczaneler where IlceID=@IlceID and NobetTarihi = GetDate()", baglanti);
            cmdNobetci.Parameters.AddWithValue("@IlceID",Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, "IlceID").ToString()
            rp.DataSource = cmdAltKat.ExecuteReader();
            rp.DataBind();
        }

    Tabi burada tablo yapınızı bilmediğimden değerleri kendim uydurdum. Siz kendinize göre düzenlersiniz.


    İletişim

    • Yanıt Olarak İşaretleyen KaanOZTRK 19 Ocak 2015 Pazartesi 17:17
    19 Ocak 2015 Pazartesi 12:10
    Moderatör