Tag-Archive for » Create Table «

C# ile Sınırsız Html(ul,li) Menü (Recursive Functions)

En çok başımızı ağrıtan uygulamalardan birisi de sınırsız menü yapım işlemleridir.Dannyz arkadaşıma lazım olan bu menünün C# ile kodlanmış olan halini burda paylaşmak istiyorum.

Oracle veritabanı :

CREATE TABLE SINIRSIZ_MENU
(
  ID      INTEGER,--menü id
  ADI     VARCHAR2(20 BYTE) NOT NULL, -- menü adı
  UST_ID  INTEGER, -- menü üst id, eğer üst id yoksa değeri null olmalıdır
  URL VARCHAR(255) -- adres
)

C# kodları :

public string Sinirsizmenu(string pPrnt)
{
            var dbs = new VeritabaniBaglantiYap("thegkmnkc", "localhost", "****");
            var dt = dbs.SorguSonucu("select coalesce(M.UST_ID,0) ust_id,id,adi from sinirsiz_menu m order by m.id asc"); // DataTable
            var diziler = new Hashtable();
            var indArr = new int[dt.Rows.Count];
            for (var i = 0; i < dt.Rows.Count; i++)
            {
                var tmp = new Hashtable();
                tmp["baslik"] = dt.Rows[i]["ADI"].ToString();
                tmp["parent"] = dt.Rows[i]["UST_ID"].ToString();
                tmp["url"] = dt.Rows[i]["URL"].ToString();
                diziler[dt.Rows[i]["ID"].ToString()] = tmp;
                indArr[i] = Convert.ToInt32(dt.Rows[i]["ID"].ToString());
            }

            var hasChilds = false;
            var mnuStr = "";
            for (var i = 0; i < diziler.Count; i++)
            {
                var enm = (Hashtable)diziler[indArr[i].ToString()];
                var enim = enm.GetEnumerator(); //IDictionaryEnumerator
                enim.MoveNext();
                var anahtar = indArr[i].ToString();
                var baslik = enim.Value;
                enim.MoveNext();
                var prnt = enim.Value.ToString();
                enim.MoveNext();
                var url = enim.Value.ToString();

                if (pPrnt != prnt) continue;
                if (!hasChilds)
                {
                    hasChilds = true;
                    mnuStr += "<ul>";
                }
                mnuStr += "<li><a href="\">" + baslik + "</a>";
                mnuStr += Sinirsizmenu(anahtar);
                mnuStr += "<li>";
            }
            if (hasChilds)
                mnuStr += "</ul>";
            return mnuStr;
}

bu ilk hali, daha sonra optimizasyon yapıp yayınlayacağım yine burada, ancak istenilen yapıyı oluşturuyor şimdilik.