PDA

View Full Version : سوال: پیدا کردن تمامی موارد انتخاب شده در Grid View



raziee
پنج شنبه 17 اردیبهشت 1388, 12:34 عصر
سلام دوستان.
من در حال نوشتن برنامه ای هستم که نیاز هست تمامی افرادی رو که کاربر در گرید ویو انتخاب کرده در بانک ذخیره بشه.
برای این کار در گرید ویو سه سطون قرار داده ام که ستون اول کد فرد هست و ستون دوم نام شخص که از بانک میخونه و همینطور ستون سوم رو در برنامه ایجاد کردم که از نوع Checkbox هست.
سوالم اینه که چطور میتونم بفهمم که کدوم یک از افراد انتخاب شده اند و کد هر کدوم رو به دست بیارم تا در بانک دیگه ای ذخیره کنم.
ممنون از لطفتون

happy65_sh
پنج شنبه 17 اردیبهشت 1388, 13:04 عصر
سلام
برای این کار می تونی یک ArrayList تعریف کنی و در ایونت CellValueChanged مربوط به دیتاگرید شماره ایندکس سطرت را در صورت True بودن به اون آرایه اضافه کنی و از آن به بعد از اون آرایه استفاده کنی.


if (dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString() == "True")
myarray.Add(e.RowIndex);
else
myarray.Remove(e.RowIndex);

شما به جای 0 در Cell[0] شماره اون ستونی رابذاریدکه Checkbox را در اون قرار دادین.

asefy2008
پنج شنبه 17 اردیبهشت 1388, 13:17 عصر
نمی دونم اون Checkbox که گفتی برای اینکه کاربر بااستفاده از اون افراد رو انتخاب کنه اگر این جوری باشه خوب زمان انتخاب اون Checkbox ها ردیفشون رو ببین کدوم هست وقتی همه انتخاب شد و کاربر دکمه انتخاب رو زد با استفاده از اون ردیف هایی که قبلا بدست آوردی اون ها رو به جدول دیگه انتقال بده( البته برای این از کلاس استفاده کن .)
یا می تونی در پایان انتخاب کاربر ببینی کدوم Checkboxها تیک خورده بعد انتقال بدی.

raziee
جمعه 18 اردیبهشت 1388, 00:06 صبح
نمی دونم اون Checkbox که گفتی برای اینکه کاربر بااستفاده از اون افراد رو انتخاب کنه اگر این جوری باشه خوب زمان انتخاب اون Checkbox ها ردیفشون رو ببین کدوم هست وقتی همه انتخاب شد و کاربر دکمه انتخاب رو زد با استفاده از اون ردیف هایی که قبلا بدست آوردی اون ها رو به جدول دیگه انتقال بده( البته برای این از کلاس استفاده کن .)
یا می تونی در پایان انتخاب کاربر ببینی کدوم Checkboxها تیک خورده بعد انتقال بدی.
من دقیقا همین کار رو میخوام بکنم اما خوب نمیدونم چه جوری.
یعنی دیتا گرید پر شده با سه ستون.
ستون اول کد - ستون دوم نام و ستون سوم هم چک باکس.
میبایست بعد از زدن دکمه ثبت کد تمام سطر هایی که چک باکس رو انتخاب کرده به من نشون بده.
من همین روبلد نیستم دیگه.:ناراحت::اشتباه:


در ایونت CellValueChanged مربوط به دیتاگرید شماره ایندکس سطرت...
از راهنماییتون ممنون. نه اینکه فرمایشات شما صحیح نیست استفاده از این رویداد کمکی به من نمیکنه.

asefy2008
جمعه 18 اردیبهشت 1388, 00:37 صبح
خوب در زمانی که کاربر چک می زنه ببین کدوم سطر رو سلکت می کنه؟
اگر متوجه نشدی بگو یه مثال می زارم.

hojjat_gh
جمعه 18 اردیبهشت 1388, 09:26 صبح
دو راه داری
یا همون موقع که چک سطر رو زد اون سطر ذخیره بشه
یا اینکه افرادی رو که میخواد انتخاب کنه بعد با زدن مثلا دکمه ok اونا رو ذخیره کنی که باید با یه حلقه for افراد اتخابی رو پیدا کنی ویکی یکی ذخیره کنی

raziee
جمعه 18 اردیبهشت 1388, 10:36 صبح
خوب در زمانی که کاربر چک می زنه ببین کدوم سطر رو سلکت می کنه؟

یا همون موقع که چک سطر رو زد اون سطر ذخیره بشه

با تشکر از شما اما این کار رو نمیخوام بکنم . علت زیاد شدن کد نویسی.
اگر این کار رو بکنم و هربار که چک باکس تیک خورد بیاد در آرایه بندازه میبایست در هر بار چک بشه که آیا این سطر قبلا انتخاب شده و آیا نه.
درسته که با یه شرط میشه درستش کرد اما پردازش بالا میره (اونم الکی)

بهترین کار باید همین باشه که بعد از زدن دکمه ثبت بیاد گرید رو از ابتدا تا انتها بخونه و کد سطر هایی که چک باکس تیک خورده رو در جایی بنویسه و حالا مثلا بعد از نمایش نهایی به کاربر و همیطور تایید نهایی کاربر در جدول دیگر ثبت بشه.
اما خوب دوستان من ، من همین رو بلد نیستم دیگه آخه:گریه:
1: چگونگی پیدا کردن تعداد سطر ها برای استفاده در حلقه
2: چونگی فهمیدن کد سطر های منتخب


کد:
if (dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString() == "True") myarray.Add(e.RowIndex);else myarray.Remove(e.RowIndex);
شما به جای 0 در Cell[0] شماره اون ستونی رابذاریدکه Checkbox را در اون قرار دادین.

این کد جوابگو نیست.

----------------------------
راستی یه سوال دیگه هم داشتم اونم اینه که باتوجه به اینکه تعداد افراد نمایش داده در گرید زیاد هستند محتوای گرید سورت است. تا اینجا که هیچی اما من دو تکست باکس دارم برای جستجو و راهتی کار کاربر که اگر تکست باکس جستجو با نام رو زد حرفی نوشت گرید دوباره پر بشه اما با تمامی افرادی که سرآغاز نامشون حرف نوشته شده در تکست باکس باشن.
و اگر هم با تکست باکس کد عددی رو زد بیاد گرید رو دوباره پر بکنه با تمام کسانی که کدشون با این کد نوشته شده نمایش داده میشه .
اینم عکسش:
30628

من برای این کار یه StoredProcedure ساختم و در زمان طراحی به این پرویسجر وصل شدم.
اما در زمان طراحی (یعنی با استفاده از اسمارت تگ گرید) در ارسال پارامتر های ورودی مشکل داره.
میدونید علتش چیه؟

asefy2008
جمعه 18 اردیبهشت 1388, 12:51 عصر
1: چگونگی پیدا کردن تعداد سطر ها برای استفاده در حلقه
منظورتون این هست :



dataset.table.Rows.count;



2: چونگی فهمیدن کد سطر های منتخب


DataGridView.CurrentCell.RowIndex

در ضمن در مورد قسمت آخر سوالتون اگر جواب رو پیدا کردید لطف کنید اون رو قرار بدید چون من هم دقیقا می خوام یه همچین کاری رو تو پروژه خودم انجام بدم .

raziee
جمعه 18 اردیبهشت 1388, 18:24 عصر
در ضمن در مورد قسمت آخر سوالتون اگر جواب رو پیدا کردید لطف کنید اون رو قرار بدید چون من هم دقیقا می خوام یه همچین کاری رو تو پروژه خودم انجام بدم .
بله حتما. در همین تاپیک میگذارم.

raziee
جمعه 15 خرداد 1388, 22:52 عصر
در ضمن در مورد قسمت آخر سوالتون اگر جواب رو پیدا کردید لطف کنید اون رو قرار بدید چون من هم دقیقا می خوام یه همچین کاری رو تو پروژه خودم انجام بدم .

من قصد داشتم از SP استفاده کنم که با مشکل برخورد کردم(یعنی نتونستم)
اما با T SQL انجامش دادم.
به این صورت:


T_SQL = "SELECT p_Code AS کد, p_Name + ' ' + p_Family AS نام " +
" FROM Personnel " +
" WHERE (p_Code NOT IN " +
" (SELECT Member.p_Code " +
" FROM [GROUP] INNER JOIN " +
" Member ON [GROUP].g_Code = Member.g_Code AND [GROUP].g_Code = Member.g_Code AND [GROUP].g_Code = Member.g_Code AND " +
" [GROUP].g_Code = Member.g_Code INNER JOIN " +
" Personnel ON Member.p_Code = Personnel.p_Code AND Member.p_Code = Personnel.p_Code AND Member.p_Code = Personnel.p_Code AND " +
" Member.p_Code = Personnel.p_Code " +
" WHERE ([GROUP].g_Code = " + cmbGroup.SelectedValue.ToString() + "))) AND (p_Family LIKE '%" + txtSearchName.Text.Trim().ToString() + "%') " +
" ORDER BY p_Family, p_Name";
dgvGroup.DataBindings.Clear();
SqlConnection myCon = new SqlConnection(myConnectionString);
myCon.Open();
SqlDataAdapter myDA = new SqlDataAdapter(T_SQL, myCon);
DataSet myDS = new DataSet();
myDA.Fill(myDS, "Personnel");
dgvGroup.DataBindings.Add(new Binding("DataSource", myDS, "Personnel"));
myCon.Close();


توضیحی که در رابطه با این t SQL باید بدم اینکه من میخوام داده های رو بدست بیارم که به سه جدول مرتبط هستند.
این کد ، کد و نام کارمندانی رو برمیگردونه که هنوز درسی رو ثبت نکردند.

shahab_ss
جمعه 30 مرداد 1388, 11:57 صبح
سلام،
البته میدونم که این پست مربوط به گذشته میشه و شما الان مشکلت حل شده. اما من امروز به این مسئله برخورد کردم و اینجوری حلش کردم.
گفتم شاید به بقیه دوستانی که در آینده به این مشکل برخورد میکنند کمک کنه !