PDA

View Full Version : دسترسی به لیبلی در گریدویو



!mahdi!
دوشنبه 23 مرداد 1391, 03:43 صبح
با سلام

من دارم با زبان #Cتو ASP کد میزنم،میخوام یه گرید ویو که بصورت template هست از بانکم به لیبلاش مقدار بدم،حالا یه لیبل تو قسمت هدر گرید دارم که باید مقدار بگیره ،در تصوری که فرستادم میخوام lblname_hall رو از بانک مقدار بدم، اما نمیدونم دستورش چطوریه در ضمن دستور زیر رو هم امتحان کردم که اون اطلاعات رو میاره تو سطر 0 نه هدر،لطفا راهنمایی ام کنید.

;()Label)(GridView_Hall.Rows[0].FindControl("lblname_hall"))).Text = name_hall.ToString)
با تشکر

fakhravari
دوشنبه 23 مرداد 1391, 11:41 صبح
LinkButton میشه دکمه که کلیک شده.
GridViewRow row = (GridViewRow)((LinkButton)e.CommandSource).NamingC ontainer
Label lbl = (Label) row.FindControl("LabelID");

!mahdi!
دوشنبه 23 مرداد 1391, 18:06 عصر
سلام
خیلی ممنون از جوابتون،ولی در قسمت های CommandSource و ontainer ارور هست،باید چیکار کنم؟ درضمن من برای اتصال به بانک از لینک استفاده میکنم.
در ضمن من باید در قسمت دیزاین یه لینک باتن قرار بدم؟اگر پاسخ شما مثبت است ،لطفا بگید در کجا؟(منظورم اینه که اگر باید قرار بدم باید بجای اون لیبلی که در هدر است قرار بدم یا هرجا که خواستم)
با تشکر

fakhravari
دوشنبه 23 مرداد 1391, 22:13 عصر
شما می خواهید از قسمت کد چی بگیرید؟

!mahdi!
دوشنبه 23 مرداد 1391, 22:57 عصر
این کد من هست :
DataClasses1DataContext hall = new DataClasses1DataContext();
var hall_part = from h in hall.View_Hall_Part_Topics
select h;
foreach (var id_hall in hall_part)
{
string name_hall = id_hall.Name;
((Label)(GridView_Hall.Rows[0].FindControl("lblname_hall"))).Text = name_hall.ToString();
}
GridView_Hall.DataSource = hall_part;
GridView_Hall.DataBind();

fakhravari
دوشنبه 23 مرداد 1391, 22:59 عصر
منظورم اینه اون مقدار در قسمت کد میخواهین میخواهید چی کنید؟

dorparasti
دوشنبه 23 مرداد 1391, 23:17 عصر
شما می خواید عنوان هر فیلد رو هم از دیتابیس بگیرید ؟

به روش بالا نمی تونید . من این روش رو به ذهنم میاد :
1- موقع گرفتن اطلاعات از دیتابیس همونجا که foreach دارید یک آرایه تعریف کنید و عناوینی که موردنظرتون هست توی اون بزارید

List<string> headers =new List<string>();
foreach (var id_hall in hall_part)
{
headers.Add(id_hall.Name);
}


بعد در رویداد DataBinding گریدویو این کد رو بنویسید :



if (e.Row.RowType = DataControlRowType.Header)
{
for(int i=0;i<headers.count;i++)
{
e.Row.Cells[i].Text = headers[i];
}
}



تست نکردم اما احتمالا کار می کنه

!mahdi!
سه شنبه 24 مرداد 1391, 12:30 عصر
خیلی ممنون از راهنمایی شما،ولی این کد نیز جوابگو نیست.
من برای پروژه پایانی ام یه فروم دارم که شبیه همین فروم هست ،حالا تو قسمت تالارها مانند همین بخش تالار این سایت،باید اسم تالار و بخش های فرعی اون رو بیارم ،راه حلتون چیه ؟
من از گرید ویو تو در تو که استفاده میکنم خیلی مشکل داره ،حتی وقتی هم که هر دوشون فقط تمپلیت فیلد دارن،من اصلا دسترسی به لیبلهای گرید ویو داخلی ندارم،که بگم این داده ها اگر فلان طور بود ،وارد این لیبل بشن.
از یه گریدویو هم که مسلما نمیتونم بخش های فرعی رو نشون بدم.
شایدم اشتباه تحلیل کردم،و گرید ویوی تو در تو نباید استفاده کنم.
لطفا راهنمایی ام کنید

roomezonline
سه شنبه 24 مرداد 1391, 14:57 عصر
دوست عزیز در مورد این موضوع زیاد بحث شده با این حال من دوباره اینجا برای شما توضیح میدم

شما برای اینکه بتونید یک Label رو توی گرید سرچ کنید و عملیاتی رو انجام بدید باید از روش زیر استفاده کیند




For i As Integer = 0 To dgpost.Rows.Count - 1
Dim lbl1 As Label = DirectCast(dgpost.Rows(i).FindControl("lbl1"), Label)
lbl1.text = "Your text"
next

!mahdi!
سه شنبه 24 مرداد 1391, 15:38 عصر
خیلی ممنون از اینکه زحمت کشیدید دوباره برایم این کد رو فرستادید،بله بنده این روش رو نه تنها در این سایت بلکه در سایت های مرتبط دیگر نیز دیده بودم،ولی به این نکته توجه کنید که بنده یک لیبل و یه حلقه نخواهم داشت،بلکه ممکن است بارها این قضیه تکرار شود،میخواهم این همه کار تکراری و طولانی انجام نشود.
من حداقل 1 گریدویو دارم که داخلش علاوه بر چندین لیبل یک گریدویو دیگر نیز موجود است،که باز هم داخل اون گرید چندین لیبل هست،سربار بسیاری وارد خواهد شد،
ممنون میشم راه حل دیگری پیشنهاد کنید