سلام. من میخوام برای منوی سایتم زیر منو بذارم که از دیتابیس بخونه و از ریپیتر استفاده کنم.
توی بانک اطلاعاتی دو تا جدول ساختم.
جدول اول به اسم Tbl_Menu برای منو:
جدول دوم به اسم Tbl_ZirMenu برای زیر منو:
این کد رو در صفحه Main.master نوشتم:
<div class="Menu"> <div class="MCenter"> <ul> <asp:Repeater ID="Repeater1" runat="server"> <ItemTemplate> <li> <a href='<%# Eval("Mnu_Link")%>'><%# Eval("Mnu_Title") %></a> <ul> <asp:Repeater ID="Repeater2" runat="server"> <ItemTemplate> <li><a href='<%# Eval("Mnu_Link")%>'><%# Eval("Mnu_Title") %></a></li> </ItemTemplate> </asp:Repeater> </ul> </li> </ItemTemplate> </asp:Repeater> </ul> </div> </div>
برای خلاصه کردن کد ها یک کلاس به نام DAL درست کردم و توابع رو به این صورت داخلش نوشتم:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data; using System.Data.SqlClient; using System.Net.Mail; /// <summary> /// Summary description for DAL /// </summary> public class DAL { public DAL() { // // TODO: Add constructor logic here // } public void ExecNonQuery(string sqltext) { SqlConnection k = new SqlConnection(); k.ConnectionString = "Data Source=SADEGH-PC;Initial Catalog=Cr4bD6Jk8xq5gUj4;Integrated Security=True;User Instance=False"; k.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = k; cmd.CommandText = sqltext; cmd.ExecuteNonQuery(); k.Close(); } public DataTable ExecuteQuery(string sqltext) { SqlConnection k = new SqlConnection(); k.ConnectionString = "Data Source=SADEGH-PC;Initial Catalog=Cr4bD6Jk8xq5gUj4;Integrated Security=True;User Instance=False"; DataTable dt = new DataTable(); SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = new SqlCommand(); da.SelectCommand.Connection = k; da.SelectCommand.CommandText = sqltext; da.Fill(dt); return dt; } }
و این کد رو در بخش Main.master.cs نوشتم:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class Main : System.Web.UI.MasterPage { protected void Page_Load(object sender, EventArgs e) { Menubind(); Zirmenubind(); } public void Menubind() { DAL run = new DAL(); string sqltext = "Select * from tbl_menu where Mnu_PosID=1 order by Mnu_Order asc"; Repeater1.DataSource = run.ExecuteQuery(sqltext); Repeater1.DataBind(); } public void Zirmenubind() { DAL run = new DAL(); string sqltext = "Select * from tbl_zirmenu Where mnu_oid=" + Eval("ID"); Repeater2.DataSource = run.ExecuteQuery(sqltext); Repeater2.DataBind(); } }
اما اجرا میگیرم به این ارور دیتابیس میخورم که میگه آی دی Repeater2 وجود نداره درحالی که وجود داره و runat هم مساوی server هست.
اصلا نمیدونم دستور select زیر منو رو درست نوشتم یا نه. دو هفته هست درگیر این قسمتم لطفا راهنماییم کنید ممنون.
من از همین مقالات برای درست کردن زیرمنو کمک گرفتم اما الان مشکل من اینجاست که آی دی Repeater2 دو رو نمیخونه و ارور میده
منظور از Eval در متد Zirmenubind چیست ؟
اون دستور select رو در متد zirmenubind نمیدونم چجوری باید بنویسم. اون Eval رو از مقاله زیر کپی کردم
Eval رو فقط میتونید در aspx و داخل یک کنترل Data استفاده کنید
در کد نمیتونید از Eval استفاده کنید
چرا دقیقا مثل خود مقاله پیش نرفتید ؟
دوست عزیز لینک زیر به شما کمک خواهد کرد
http://nazimakul.com/article/repeater-inside-an-other-repeater-in-asp-net_1050
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)