PDA

View Full Version : مشکل با DataGrid



asgari2005
پنج شنبه 24 شهریور 1384, 18:25 عصر
من یک DataGridدارم که لیست سفارشات را نمایش می دهد در این DataGrid دو ستون وجود دارد که یکی آن شامل DropDownList است که وضعیت سفارشات را نمایش می دهد و به وسیله آن کاربر می تواند وضیعت سفارش را تغییر دهد و ستون دیگری هم شامل دکمه تائید می باشد که وضعیت در بانک اعمال کند مشکلی که من دارم این است که می خواهم زمانی که کاربر DropDownList را انتخاب کرد دکمه تائید در ردیف خودش فقط فعال شود من چگونه می توانم تشخیص دهم که کاربر کدام DropDownList را انتخاب کرده تا فقط دکمه هم ردیف خودش فعال گردد ضمنا زمانی که Page لود می گردد تمام دکمه ها غیر فعال است .

Behrouz_Rad
پنج شنبه 24 شهریور 1384, 23:25 عصر
اگر نگاهی به کد زیر بندازید، اطلاعات جامعی در این باره کسب می کنید:
http://www.barnamenevis.org/forum/showthread.php?t=26216&page=1
به طور خلاصه، نحوه تشخیص DropDownList انتخابی توسط کاربر، در روال SelectedIndexChanged این کنترل با دستور:


'VB.NET
Dim xList As DropDownList = CType(sender, DropDownList)
//C#.NET
DropDownList xList = (DropDownList) sender;

انجام می پذیرد.
پس از اجرای دستور فوق، متغیر xList دارای ارجا به DropDownList انتخابی است.
موفق باشید.

asgari2005
جمعه 25 شهریور 1384, 12:14 عصر
من فقط می خواهم دکمه هم ردیف DropDownList خودش را فعال کنم فقط همین!!!!!
من چگونه تشخیص دهم کدام ردیف DataGrid برای من فرستاده شده؟؟؟؟؟؟؟؟؟؟؟

Behrouz_Rad
جمعه 25 شهریور 1384, 14:34 عصر
دوست عزیزم!
قبلا خدمتتون عرض کردم. در اون کد، عمل مورد نظر شما در روال SelectedIndexChanged به خوبی نشون داده شده.
به هر حال...
همون طور که قبلا هم گفتم ابتدا باید DropDownList انتخاب شده مشخص بشه.
که با دستور:


Dim xList As DropDownList = CType(sender, DropDownList)

ارجا به DropDown انتخاب شده توسط کاربر به دست خواهد آمد.
حال از سلسله مراتب فرزند به پدر برای پیدا کردن دکمه ی هم ردیف با DropDown انتخاب استفاده می کنیم.
بدین صورت که ابتدا ارجائی به پدر DropDown (که یک خانه از Table است با همان TD) به دست می آوریم:


Dim Cell As TableCell = CType(xList.Parent, TableCell)

و حال، ارجائی به پدر TD که همانا TR یا Table Row است:


Dim Item As DataGridItem = CType(Cell.Parent, DataGridItem)

بسیار خوب!
حال ارجا به ردیفی که DropDown انتخاب در آن وجود دارد به دست آمده است.
به راحتی می تونید ارجائی به دکمه ی موجود در ستون دلخواه ردیف مورد نظر به دست بیارید:


Dim myButton As Button = CType(Item.Cells(2).Controls(1), Button)

حال با دستور myButton.Enable = True به راحتی دکمه را فعال کنید.
توجه داشته باشید که شماره ستون ها در DataGrid از صفر شروع می شود.
در دستور فوق، فرض شده است که دکمه در سومین ستون وجود دارد.
همچنین عدد نوشته شده در جلوی کلمه ی Controls نیز مشخص کننده ی مکان کنترل در ControlCollections است.
موفق باشید.

asgari2005
جمعه 25 شهریور 1384, 21:23 عصر
خیلی مجکرم از راهنمایی ولی من روال SelectedIndexChanged را در کجا فراخوانی کنم شما در مثالی که در سایت قرار دادید این روال را در DataItemBound فراخوانی می کنید در صورتی که من این کار را کردم ولی عملا هیچ اتفاقی نیافتاد مشکل در این است که باز هم می گویم چگونه تشخیص دهم کدام DropDownList انتخاب شده مهم این مسئله است من باید این کار را تشخیص دهم من DropDownList را به عنوان پارامتر به روال SelectedIndexChanged
پاس دهم .....................
نمی دانم آیا منظور مرا متوجه شده اید................
با تشکر

asgari2005
جمعه 25 شهریور 1384, 21:35 عصر
شما گفتید:
همون طور که قبلا هم گفتم ابتدا باید DropDownList انتخاب شده مشخص بشه

من باید این تشخیص را بدهم و آن را به عنوان پارامتر به روال SelectedIndexChanged ارسال کنم من فکر می کنم باید این تشخیص در روال Page_load انجام گیرد

Behrouz_Rad
جمعه 25 شهریور 1384, 23:01 عصر
دوست عزیزم!
روال SelectedIndexChanged مربوط به DropDownList است و در هنگام انتخاب یک آیتم از DropDown اتفاق می افتد.
اندکی بیشتر مطالب قبلی بنده را مطالعه کنید و با دقت و تامل بیشتری در کدی که در آن لینک گذاشتم بنگرید!
موفق باشید.

asgari2005
شنبه 26 شهریور 1384, 21:44 عصر
دوست خیلی عزیزم من یک مطلب را در ابتدا بگویم این که روال SelectedIndexChanged زمانی کار می کند در واقع زمانی اتفاق می افتد که که در روال InitializeComponent کد زیر قرار گیرد:
this.drpnamepro.SelectedIndexChanged += new System.EventHandler(this.drpnamepro_SelectedIndexC hanged);
وقتی کاربری روی DropDown دابل کلیک کند به روال SelectedIndexChanged می رود و در روال InitializeComponent کد بالا را به طور اتوماتیک قرار می دهد آیا این مطلب درست است؟؟؟؟؟؟؟؟؟؟؟
با توضیحاتی که من دادم من باید به طور دستی روال SelectedIndexChanged فراخوانی کنم چراکه نمی توانم کد بالا در روال InitializeComponent قرار دهم چون خطا می دهد برای Dropdownlist ای که تعریف نشده در قسمت تعریف Component از جمله Label .
و باید DropDownList انتخابی را تشخیص دهم و آنرا به عنوان پارامتر ارسال کنم شما هم در کدی که در سایت قرار داده اید این روال را به صورتی دستی فراخوانی می کنید آن هم در DataItemBound .
مهم محل فراخوانی SelectedIndexChanged است در حالی که شما نحوه کدنویسی در این روال را توضیح دادید
امیدوارم توانسته شده باشم منظورم را انتقال داده باشم

با تشکر

Behrouz_Rad
یک شنبه 27 شهریور 1384, 09:37 صبح
بله شما درست می فرمایید.
این مشکل فقط در #C وجود داره و راه حلش هم اضافه کردن دستی رویداد به کنترل هست.
بدین شکل که ابتدا روال رو از کنترل می گیریم تا منجر به بروز خطا نشه:


this.DropDownList1.SelectedIndexChanged -= new System.Web.UI.WebControls.DropDownList1CommandEven tHandler(this.DropDownList1_SelectedIndexChanged);

و زمانی که DropDown رو با DataSource پر کردید، روال رو به DropDown اتچ می کنیم:


this.DropDownList1.SelectedIndexChanged += new System.Web.UI.WebControls.DropDownList1CommandEven tHandler(this.DropDownList1_SelectedIndexChanged);

بقیه سوالات شما هم قبلا پاسخ داده شده.
موفق باشید.

asgari2005
یک شنبه 27 شهریور 1384, 19:16 عصر
این کدها را من در کجا قرار دهم.
از راهنمایی شما خیلی مجکرم
با تشکر

asgari2005
یک شنبه 27 شهریور 1384, 19:40 عصر
من این کدها را در InitializeComponent قرار داده ام ولی باز هم خطا می دهد
C:\Inetpub\wwwroot\business\viewforad.aspx.cs(116) : 'business.viewforad' does not contain a definition for 'drptypeorder'
خطا آن در واقع مربوط به آن مطلب ای قبلا عرض کردم مربوط می شود

asgari2005
سه شنبه 29 شهریور 1384, 12:22 عصر
با تشکر از آقا بهروز برای توضیحاتش
من راه حل را پیدا کردم من کدش را در اینجا قرار می دهم شاید دیگران هم به مشکل من برخورد کنند.
راه حل این است که فقط در روال Page_Load کد زیر را قرار دهید.
foreach(DataGridItem dItem in DataGrid1.Items)
{
DropDownList drptypeorder = (DropDownList)dItem.Cells[7].FindControl("drptypeorder");
drptypeorder.SelectedIndexChanged += new System.EventHandler(this.drptypeorder_SelectedInde xChanged);
}
با تشکر