PDA

View Full Version : نحوه استفاده از checkbox بجای ستون select



داش اکل
سه شنبه 05 اسفند 1382, 21:06 عصر
در پروژه ای که دارم روش کار می کنم
توی یه وب فرم یه دیتا گرید گذاشتم می خوام به جای ستون select از checkbox استفاده کنم
بطوریکه کاربر چک باکس ها رو یجا انتخاب کنه و بعد با یه کلیک روی دکمه ای خاص به سرور postback شده تا در code behind روی رکورد های انتخاب شده در دیتا گرید پردازشی انجام دهم
در حالت معمولی گرید با هر کلیک روی گزینه select دیتا گرید یه post back انجام می شه که این اصلا مقرون به صرفه نیست.
اینو چه جوری انجام بدم؟؟؟؟

مهدی کرامتی
سه شنبه 05 اسفند 1382, 21:19 عصر
داش آکل: هر جایی سنتی داره، سایت برنامه نویس هم همین طور. بر طبق قانون شماره 3 (http://www.barnamenevis.org/forum/rules.php#3) شما موظفید از تیتر مناسب برای سوالتان استفاده کنید.
این دفعه رو من براتون اصلاح کردم، اما دفعه بعد ممکنه تاپیک تون حذف شه.

از ما گفتن بود، حالا خود دانی.

امضا: طیب!

داش اکل
سه شنبه 05 اسفند 1382, 21:22 عصر
ریس من شرمندم .....
اما کارم گیره می شه جواب بدید!!

Mahdavi
سه شنبه 05 اسفند 1382, 21:34 عصر
دوست عزیز
به datagrid خودت تو قسمت columns یه template cloumn اضافه کن
بعد برو تو قسمت edit این template و یه chekbox بزار.

CheckBox Disable = (CheckBox) e.Item.FindControl("Disabled");

به شرطی که اسمه اون chekbox رو Disabled گذاشته باشی.
با کد بالا بهش دسترسی داری :lol:

Vahid_Nasiri
سه شنبه 05 اسفند 1382, 21:47 عصر
روش فوق فقط برای یک ردیف بسیار مناسب است :flower:

ولی اگر تعداد ردیف ها زیاد بود و قرار بود از بین 1000 ردیف تعداد تیک خورده شده انتخاب و درج شود باید از روش زیر استفاده کرد:


public Int32[] SelectedIndexes
{
get
{
System.Collections.ArrayList selectedIndexList = new System.Collections.ArrayList();

foreach( DataGridItem item in DataGrid1.Items )
{
Control foundControl = item.FindControl("chkHRow");
CheckBox Checkselector = foundControl as CheckBox;
RadioButton radioselector = foundControl as RadioButton;
if ( Checkselector != null && Checkselector.Checked )
{
selectedIndexList.Add( item.ItemIndex );
}
else if ( radioselector != null && radioselector.Checked )
{
selectedIndexList.Add( item.ItemIndex );
}
}
return (Int32[])selectedIndexList.ToArray(typeof( System.Int32 ) );
}
}

و برای استفاده :


foreach(int i in SelectedIndexes )
edit_Radifs(i+1);

داش اکل
چهارشنبه 06 اسفند 1382, 01:06 صبح
اقای نصیری این کلاسی که تعریف کردی رو می شه یه کمی توضیح بدی و بفرمایی که چطور می تونم اونو توی وب فرم بذارم و استفاده کنم

داش اکل
چهارشنبه 06 اسفند 1382, 01:11 صبح
مهدوی عزیز ایا این روش برای چک کردن همه سطرها قابل استفاده است؟ چطور می شه همه سطر های که تیک خورده اند رو بازیابی کرد؟ با تشکر از همه دوستان

Vahid_Nasiri
چهارشنبه 06 اسفند 1382, 09:08 صبح
اولا اون کلاس نیست و ایندکسر است ثانیا تنها کافی است همانطور که دوستمان گفتند یک ستون template اضافه کنی و در آن یک چک باکس به نام chkHRow را اضافه کنی
سپس ایندکسر را می نویسی
و روش استفاده هم گفته شد.

SoheilKH
پنج شنبه 07 اسفند 1382, 18:59 عصر
من برای چک کردن ستون ها از همان روشی که آقای نصیری گفتند استفاده می کردم
اما مشکلی که من بر می خورم TimeOut (از دست این اینترنت ایران :-x )است

راه دیگه ای که برای این کار استفاده کردم استفاده از کدهای جاوا است (مثل ادرس بوک سایت یاهو).

داش اکل
سه شنبه 12 اسفند 1382, 09:37 صبح
می شه توضیح بدین Indexer چیه؟

jannati
سه شنبه 24 شهریور 1383, 12:27 عصر
CheckBox Disable = (CheckBox) e.Item.FindControl("Disabled");

من از کد بالا برای پیدا کردن checkboxاستفاده کردم .ولی در قسمت e.itemدارای خطا بود.بعدش از کد زیر استفاده کردم:


DataGridItemCollection items=DataGrid1.Items;
for (int i=0; i<items.Count; i++)
{
CheckBox cb= (CheckBox)items[i].FindControl("disable");

if ((cb != null) && cb.Checked)
{
Response.Write("salam");
//ReadRecords ("select * from a_amanat");
}
}

در اینجا کلمه salamرا تایپ میکنه.ولی من نمیدونم چطور تشخیص بدم که checkboxکدوم سطر علامت زده شده؟
کل کار من با checkboxها اینه که در یک سیستم امانتداری کتاب؛ کاربر بتونه با یک تیک زدن تحویل کتاب را وارد کند.یعنی اطلاعات کتابهایی که امانت هستند در دیتاگرید میاد و میخوام هرکدوم که checkboxتحویلشون زده شد ؛در دیتابیس فیلد تحویل trueبشه.میشه راهنمایی کنید؟ :oops:
در ضمن اگه ممکنه این indexerرو هم یک توضیحی راجع بهش بدید .... :roll:

Vahid_Nasiri
سه شنبه 24 شهریور 1383, 18:53 عصر
از روشی که دربالا توضیح دادم استفاده کنید. این روش برای من تقریبا یک تمپلیت کاری شده...
در مورد ایندکسر هم به جزوه ی سی شارپ من مراجعه کنید (21 قسمتی)، یک مقاله کامل دارد.

jannati
چهارشنبه 25 شهریور 1383, 16:00 عصر
متاسفانه اون جزوه 21 قسمتی رو پیدا نکردم.اما تونستم از این indexerاستفاده کنم.فقط یک سوال و اینکه اگر بخوام تشخیص بدم که تیک checkboxکدوم رکورد خورده باید از همون روش editو datakeyfieldاستفاده کنم؟چون من شماره چک باکس رو دارم .ولی نمیدونم مثلا checkbox8مال کدوم IDاست.چون برای updateکردن جدول نیاز به این دارم که بدونم کلیدش چیه.
میشه یه کم راجع به این قسمت for each توضیح بدید؟ :oops:

Vahid_Nasiri
چهارشنبه 25 شهریور 1383, 18:57 عصر
اون جزوه رو از صفحه ی خانگی جدید من در LYCOS می تونید پیدا کنید. اگر فیلتر شده بود بفرمایید آنرا در کتابخانه قرار می دهم.
شما وقتی شماره چک باکس را دارید (شماره ردیف را دارید) در همان ردیف دنبال دو فیلد حداقل بگردید تا آیتم مربوطه در دیتابیس پیدا شود و قابل ادیت باشد. راه دیگر قرار دادن یک کنترل مخفی(یا غیرمخفی) است که شماره آیتم ها را به آن بایند کنید و سپس به راحتی آنرا خوانده و بر مبنای آن ادیت نمایید. و یا خیلی راحت شماره کلید را هم نمایش بدهید و سپس آنرا بخوانید.

jannati
شنبه 28 شهریور 1383, 16:49 عصر
1-خیلی ممنون از وقتی که میذارید
2-اون قسمت فیلتر شده بود.
3-همه کارها انجام شده .فقط موندم توی دستور sqlبا چه کدی مقدار checkboxرو بفهمم.مثلا میخوام توی sqlدر قسمت updateبذارم :


a_tahvil=(check)i

چون فیلد a_tahvilبولین است.اما اینطوری که نوشتم جواب نمیده.میشه بگید دقیقا syntaxچیه؟

Vahid_Nasiri
شنبه 28 شهریور 1383, 19:20 عصر
متاسفانه در کتابخانه جا نشد! در بخش سی شارپ آپلودش کردم:
http://www.barnamenevis.org/forum/viewtopic.php?t=14879

===========
اون ایندکسر به صورت یک آرایه هوشمند اندیس های این چک باکس ها را بر می گرداند (در یک حلقه ی for each که در بالا مثال زده شده). بنابراین نیاز به کار اضافی ندارد. فقط دقت داشته باشید که chkHRow (که در ایندکسر بکار رفته) نام چک باکسی است که در ستون تمپلیت اضافه شده است.

jannati
یک شنبه 29 شهریور 1383, 13:48 عصر
خیلی خیلی ممنونم.دیگه حل شد. (:D) :flower: :gift:

sobhan1381
شنبه 15 شهریور 1399, 11:01 صبح
سلام من روی یک نرم افزار صندوق قرض الحسنه کار میکنم میخواهم هر ماه به حساب تمام صاحبان حساب بطور خودکار مبلغی را اضافه کند