PDA

View Full Version : سوال: دسترسی به TemplateField های موجود در GridView



HamidNch
سه شنبه 17 اسفند 1389, 10:38 صبح
سلام به همه
دوستان من یه مشکل خیلی بزرگ دارم و اونم اینه که من یک GridView دارم که یک سری اطلاعات رو از بانک می خونه و نشون می ده.در این GridView من یه TemplateField دارم که داخلش یه لینک گذاشتم و از طریق آن
Jquery Dialog رو صدا میزنم و نمایش می دم.
حالا داخل این Dialog من یه Gridview دیگر دارم که اطلاعات مربوط به لینک کلیک شده در Gridview اول رو نمایش میده. تااینجای کار همه چیز درست و مرتب هست و به خوبی کار میکند.ضمنا GridView اول داخل یک UpdatePanel1 و Gridview دوم موجود در Dialog نیز در یک UpdatePanel دیگر قرار داده شده است.
Gridview دوم در هر سطرش یک Dropdownlist و دو تا TextBox دارد که توسط کاربر
مقدارشان تغییر می کند و در زیر این Grid یک دکمه Save وجود دارد که من می خوام از طریق آن اطلاعات Gridview دوم رو در دیتابیش بروزرسانی کنم.
حالا مشکل اینجاست که وقتی من سعی در برگرداندن مقدارهای تعیین شده توسط کاربر را دارم مقدار null دریافت می کنم:

foreach (GridViewRow row in gv_Result.Rows)

}

if (row.RowType == DataControlRowType.DataRow)
{
Label lbl_ID = (Label)row.Cells[0].FindControl("lbl_ID"); //it's correct

//it's not correct,and is my problem
DropDownList ddl_Result = (DropDownList)row.Cells[5].FindControl("ddl_Result");

//it's not correct,and is my problem
TextBox txt1 = (TextBox)row.Cells[6].FindControl("txt1");
//it's not correct,and is my pr
TextBox txt2 = (TextBox)row.Cells[7].FindControl("txt2");

{
{

حتی در برای بایند کردن GridView از این کد هم استفاده می کنم:

( if (!IsPostBack)
}
{

اما همچنان مشکل دارد.لطفا هرکسی می تونه راهنمائی کنه.
باتشکر فراوان.

Behrang_a
سه شنبه 17 اسفند 1389, 16:30 عصر
سلام به همه



foreach (GridViewRow row in gv_Result.Rows)

}

if (row.RowType == DataControlRowType.DataRow)
{
Label lbl_ID = (Label)row.Cells[0].FindControl("lbl_ID"); //it's correct

//it's not correct,and is my problem
DropDownList ddl_Result = (DropDownList)row.Cells[5].FindControl("ddl_Result");

//it's not correct,and is my problem
TextBox txt1 = (TextBox)row.Cells[6].FindControl("txt1");
//it's not correct,and is my pr
TextBox txt2 = (TextBox)row.Cells[7].FindControl("txt2");

{
{


کد بایند کردنت که ناقص بود.
حالا به جای اینکه توی کدهات شماره سلول رو مشخص کنی یک بار بدون اون تست کن ببین میشه یا نه ، من که با سی شارپ بدون استفاده از شماره سلول به راحتی کنترلها رو پیدا میکنم ، یعنی عملیات FindControl رو روی کل row انجام بده.

DropDownList ddl_Result = (DropDownList)row.FindControl("ddl_Result");

HamidNch
چهارشنبه 18 اسفند 1389, 11:30 صبح
اصلا مشکل در پیدا کردن کنترل در گرید نیست.اینو تازه متوجه شدم.مشکل تو اینه که با هربار فراخوانی Dialog یه عمل postBack اتفاق می افته و باعث تازه سازی دوباره گرید میشه و در نتیجه همواره ورودی کاربر رو ندید میگیره.
اما هنوز راه حلی براش پیدا نکردم.

Behrang_a
چهارشنبه 18 اسفند 1389, 11:51 صبح
اصلا مشکل در پیدا کردن کنترل در گرید نیست.اینو تازه متوجه شدم.مشکل تو اینه که با هربار فراخوانی Dialog یه عمل postBack اتفاق می افته و باعث تازه سازی دوباره گرید میشه و در نتیجه همواره ورودی کاربر رو ندید میگیره.
اما هنوز راه حلی براش پیدا نکردم.

یه شرط بزار و بایند کردن اطلاعات رو تو اون بزار شرطت باید این باشه که اگر postback بود بایند نکن ، در این حالت وقتی صفحه postback شده باشه اطلاعات قبلی باقی میمونه.

یه راه دیگه هم هست ، چرخه حیات صفحه اینه که اول Page_Load انجام میشه بعد میره رویدادی که اتفاق افتاده بعد هم میره Page_LoadComplete میتونی بایند کردن رو توی همین آخری انجام بدی، اما باید حواست باشه چون بعضی از مواقع همین دردسر میشه

HamidNch
چهارشنبه 18 اسفند 1389, 15:14 عصر
کد کامل این بخش اینجاست لطفا نگاه کن ببین متوجه مشکل میشی:
http://forum.how2learnasp.net/ShowTopic.aspx?Code=3553

HamidNch
چهارشنبه 18 اسفند 1389, 15:27 عصر
سوالم رو یه جور دیگه می پرسم:چطور می تونم که یه گرید داشته باشم که با کلیک روی هر سطر اون یه دیالوگ بازشه و داخل اون یه گرید دیگه باشه که اطلاعات دیتیل سطر انتخابی در گرید اول رو نشون بده.الیته تااینجاسش سخت نیست
چطور میشه گرید دوم رو ویرایش کرد.البته می خوام بدون رفرش صفحه صورت بگیره.باتشکر.

Behrang_a
چهارشنبه 18 اسفند 1389, 16:04 عصر
همون Bind شدن Gridview رو بزار تو رویداد Page_LoadComplete فکر میکنم جواب میگیری

HamidNch
پنج شنبه 19 اسفند 1389, 08:58 صبح
این رویداد رو میشه بطور کامل بنویسی با آرگومانهایی که داره. تشکر

Behrang_a
شنبه 21 اسفند 1389, 07:13 صبح
این رویداد رو میشه بطور کامل بنویسی با آرگومانهایی که داره. تشکر


protected void Page_LoadComplete(object sender, EventArgs e)
{

}

این به زبون سی شارپ هست اما کاملا شبیه رویداد Page_Load آرگومانها همون ها هستن. کافیه Page_Load رو کپی کنی بعد به LoadComplete تغییر بدی

HamidNch
شنبه 21 اسفند 1389, 13:38 عصر
نه متاسفانه مشکل حل نشد.تشکر.

karim orooji
شنبه 21 اسفند 1389, 14:19 عصر
دوست عزیز برنامه رو بزار
اونطوری بهتر میشه روش نظر داد

HamidNch
یک شنبه 22 اسفند 1389, 10:16 صبح
http://forum.how2learnasp.net/ShowTopic.aspx?Code=3553