PDA

View Full Version : سوال در مورد nested Repeater



ashkan.890
شنبه 10 اسفند 1392, 09:54 صبح
سلام و صبح بخیر
من 2 تا ریپیتر در داخل هم دارم که کد html اونه به این شکله


<div id="menu4">
<ul class="menu">
<asp:Repeater ID="Repeater2" runat="server" OnItemDataBound="Repeater2_ItemDataBound">
<ItemTemplate>
<li><a class="haschild" title="" href="#"><%#Eval("Name") %></a>
<ul class="sub-menu">
<asp:Repeater ID="Repeater3" runat="server">
<ItemTemplate>
<li><a title="" href="#"><%#Eval("Name") %></a></li>
</ItemTemplate>
</asp:Repeater>
</ul>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>
</div>



و با کد زیر اون ها رو بایند کردم



protected void Page_Load(object sender, EventArgs e)
{
//Bind Data to Repeater QuickAccess Berand
string ConnectionString2 = "Data Source=(local);Initial Catalog=ShopDB;Integrated Security=True";
SqlConnection con2 = new SqlConnection(ConnectionString2);


con2.Open();
SqlCommand cmd2 = new SqlCommand("SELECT * FROM [Berand] ", con2);


DataSet ds2 = new DataSet();
SqlDataAdapter da2 = new SqlDataAdapter(cmd2);
da2.Fill(ds2);
Repeater2.DataSource = ds2;
Repeater2.DataBind();


con2.Close();
}


protected void Repeater2_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
Repeater2 rpt = (Repeater2)e.Item.DataItem;
Repeater Repeater3 = (Repeater)e.Item.FindControl("Repeater3");


Repeater3.DataSource = rpt.Models;
Repeater3.DataBind();
}


حالا مشکل اینجاست که داخل itemDataBind ریپیتر 2 رو نمیشناسه و این ارور رو میده

'UMDshop.Default.Repeater2' is a 'field' but is used like a 'type'

ممنون میشم اگه کمکم کنید
تشکر

ashkan.890
شنبه 10 اسفند 1392, 13:05 عصر
از دوستان کسی نیست جواب سوال من رو بدونه ؟؟
ممنون میشم اگه بلد هستید کمک کنید

ahmad156
شنبه 10 اسفند 1392, 18:22 عصر
و خداوند جستجو رو آفرید برای یافتن آنچه میخواهید.اینجا (http://barnamenevis.org/showthread.php?442834-%D8%B3%D9%88%D8%A7%D9%84-%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-Repeater) رو ببین

mehrzad_ali
شنبه 10 اسفند 1392, 18:32 عصر
توی رویداد itemdatabound ّه جای کد خودت این کد رو بنویس

RepeaterItem row = e.Item;
if (row.DataItem == null)
{
return;
}

Repeater Repeater3 = (Repeater)row.FindControl("Repeater3 ");





Repeater3.DataSource = rpt.Models;

Repeater3.DataBind();

ashkan.890
شنبه 10 اسفند 1392, 19:05 عصر
و خداوند جستجو رو آفرید برای یافتن آنچه میخواهید.اینجا (http://barnamenevis.org/showthread.php?442834-%D8%B3%D9%88%D8%A7%D9%84-%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-Repeater) رو ببین

و خداوند من را آفرید برای اینکه بدون اینکه جواب سوالم رو کامل بهمم بیخیال سوال شم :لبخند:
اونم پست من بود
اون کد ها جواب نداد

ashkan.890
یک شنبه 11 اسفند 1392, 16:36 عصر
توی رویداد itemdatabound ّه جای کد خودت این کد رو بنویس

RepeaterItem row = e.Item;
if (row.DataItem == null)
{
return;
}

Repeater Repeater3 = (Repeater)row.FindControl("Repeater3 ");





Repeater3.DataSource = rpt.Models;

Repeater3.DataBind();


از rtp توی خط
Repeater3.DataSource = rpt.Models;

ایراد میگیره

mehrzad_ali
یک شنبه 11 اسفند 1392, 19:21 عصر
rpt متد خودته دیگه . باید سلکت بزنی بریزی توی Repeater3

mRizvandi
یک شنبه 11 اسفند 1392, 22:47 عصر
توی این خط اشکال داری؟
Repeater2 rpt = (Repeater2)e.Item.DataItem;

ashkan.890
دوشنبه 12 اسفند 1392, 00:06 صبح
rpt متد خودته دیگه . باید سلکت بزنی بریزی توی Repeater3

منظور تونو نفمیدم یکم واضح تر میگید :ناراحت:

mehrzad_ali
دوشنبه 12 اسفند 1392, 00:17 صبح
متدیه که شما اطلاعاته گرید داخلی رو باهاش پر میکنید .
البته باید کلید جدول خارجی رو هم توی لایترال بایند کنید تا بتونید پاس بدبد به متد گرید داخلی . به این صورت اصلاح کنید


RepeaterItem row = e.Item;

if (row.DataItem == null)

{
return;

}

Repeater Repeater3 = (Repeater)row.FindControl("Repeater3 ");


Literal ltrID = (Literal)row.FindControl("ltrID");


Repeater3.DataSource = select(ltrID.text);
Repeater3.DataBind();

ashkan.890
دوشنبه 12 اسفند 1392, 00:40 صبح
متدیه که شما اطلاعاته گرید داخلی رو باهاش پر میکنید .
البته باید کلید جدول خارجی رو هم توی لایترال بایند کنید تا بتونید پاس بدبد به متد گرید داخلی . به این صورت اصلاح کنید


RepeaterItem row = e.Item;

if (row.DataItem == null)

{
return;

}

Repeater Repeater3 = (Repeater)row.FindControl("Repeater3 ");


Literal ltrID = (Literal)row.FindControl("ltrID");


Repeater3.DataSource = select(ltrID.text);
Repeater3.DataBind();




ببخشید من هی سوال میکنم
چون زیاد با repeater کار نکردم سر در نمیارم و دارم وقت شمارم با سوالام میگیرم:خجالت:
الان من میخوام ریپیتر 3 از دیتا بیس بخونه
و اصلا سر از کد های itemDataBind سر در نمیارم
اگر امکانش هست یکم واسم توضیح میدید؟
الان من چجوری باید به ریپیتر 3 بگم از کدوم table دیتا بیس بخونه

mehrzad_ali
دوشنبه 12 اسفند 1392, 00:47 صبح
یه توضیح درباره برنامتون بدید که کارش چیه و چه اطلاعاتی توی گرید ها هست ؟ فیلدهای جدولتون رو هم بگید

ashkan.890
دوشنبه 12 اسفند 1392, 00:53 صبح
یه توضیح درباره برنامتون بدید که کارش چیه و چه اطلاعاتی توی گرید ها هست ؟ فیلدهای جدولتون رو هم بگید

برنامه ی من یک فروشگاه
اطلاعات داخل گرید ها منو ها هستند
repeater 2 منو های اصلی و repeater 3 زیر منو ها
فیلد های دیتا بیس فقط نام و ای دی هست
همین

mehrzad_ali
دوشنبه 12 اسفند 1392, 00:57 صبح
خوب شما باید یه فیلد parentID هم داشته باشی که بفهمی کدوم منو زیر منوی کدوم منو هست . در غیر اینصورت 2 تا گرید به چه درد میخوره ؟

ashkan.890
دوشنبه 12 اسفند 1392, 01:00 صبح
خوب شما باید یه فیلد parentID هم داشته باشی که بفهمی کدوم منو زیر منوی کدوم منو هست . در غیر اینصورت 2 تا گرید به چه درد میخوره ؟
درسته
به این فکر نکرده بودم
خوب حالا چجوری باید این رو کد نویسی کنم؟

ashkan.890
دوشنبه 12 اسفند 1392, 10:05 صبح
آقا مشکل من حل شد
حالا یه سوال
چجوری بگم کدوم id مال کدوم منو هست ؟
یعنی تو دستور Sql چجوری این رو بنویسم

ashkan.890
سه شنبه 13 اسفند 1392, 10:49 صبح
کسی نسیت به من جواب بده ؟:ناراحت:

ashkan.890
سه شنبه 13 اسفند 1392, 12:46 عصر
جواب این یکی سوالمم پیدا کردم
میشه یک hidden fild گذاشت دورن ریپیتر و توی event
itemDataBind اون رو find کرد و مقدارش رو ریخت توی یک استرینگ