PDA

View Full Version : حذف چند سطر فقط با یک کلیک



programerinfonet
یک شنبه 29 دی 1392, 18:27 عصر
سلام دوستان
من میخوام وقتی کاربر چند سطر گرید را انتخاب کرد و دکمه ی حذف رو زد سطرهای انتخابی حذف شوند
اما چه طور نمی دونم
لطفأ کمکم کنید

mousa1992
یک شنبه 29 دی 1392, 18:37 عصر
دو راه داری
1 - قابلیت انتخاب چند سطر رو به کاربر بدی و هنگام حذف ردیف های انتخاب شده رو حذف کنی که زیاد جالب نیست
2 - ی ستون از نوع checkbox داشته باشی و زمان ارسال دستور حذف ردیف هایی که چک خوردن حذف بشن

rasol_afkham
یک شنبه 29 دی 1392, 19:10 عصر
با استفاده از خصوصیت RemoveAt که تابعی است در کلاس Rows به صورت زیر می توانید سطری را حذف نمایید
DataGridVeiw1.Rows.RemoveAt(Index);
Index نام شماره اندیس سطری که انتخاب شده. شماره سطرهای انتخاب شده را هم می توانید از خصوصیت CurrentRow بدست آورد به صورت زیر
DataGridVeiw1.CurrentRow.Index
این در صورتی است که تنها یک سطر انتخاب باشد. اما اگر گرید ویوی شما در حالت انتخاب چند سطر باشد می توانید با استفاده از خصوصیت SelectedRows که یک آرایه است به اندیس سطرهای انتخاب شده دسترسی داشته باشید. تمام سطرهای که انتخاب شده اند به ترتیب در این آرایه قرار دارند و می توانید همانند یک آرایه با استفاده از براکت به محتوای عناصر آن (که همان شماره اندیسهای سرهای انتخاب شده است) دسترسی داشته باشید.
با استفاده از دستور زیر می توانید حالت انتخاب تمام سطر را برای گرید ویو فعال نمایید
DataGridVeiw1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
و برای انتخاب چند سطر می توانید با نگه داشن کلید کنترل از صفحه کلید چند سطر را انتخاب نمایید.
امیدوارم که توانسته باشم کمکی کنم. موفق باشید ...!

programerinfonet
یک شنبه 29 دی 1392, 19:30 عصر
مشکل من اینها نیست
من با کد زیر تنها یک سطر را می تونم حذف کنم و اون هم سطر انتخاب شده ی دیتاگرید

SqlCommand cmd =new SqlCommand("delete from Table_Gallery where Gallery_ID =" +dataGridView1.CurrentRow.Cells[0].Value, cn);
cmd.ExecuteNonQuery();

حالا اگه کلید کنترل را نگه داشتم و مثلأ 4 سطر رو انتخاب کردم چی ؟
کدمو باید به چی تغییر بدم ؟
لطفأ کمک کنید

shahryari
یک شنبه 29 دی 1392, 19:36 عصر
سلام
ابتدا یک ستون از نوع چک باکس در دیتا گرید ایجاد کنید (این ستون فقط جهت انتخاب است و ارتباطی به بانک داده ندارد)
سپس مقدار فیلدهای کلید را که ستون چک باکسش برابر ترو است را در یک آرایه بریزید و سپس با حلقه خانه های ارایه را بخوانید و دستور دلیت را اجرا کنید

shahryari
یک شنبه 29 دی 1392, 19:56 عصر
این هم یک نمونه ساده با کمی تغیرات
for (int i = 0; i < dataGridView1.RowCount -1; i++)
{
if (dataGridView1.Rows[i].Cells["CheckBoxColumn"].Value == true)
{
int j = dataGridView1.Rows[i].Cells["ID"].Value;
SqlCommand cmd = new SqlCommand("delete from Table_Gallery where Gallery_ID =" + Convert.ToString ( j), cn);
cmd.ExecuteNonQuery();
}
}

rasol_afkham
یک شنبه 29 دی 1392, 21:51 عصر
احتیاجی به این کارها نیست. چون هر بار برای پیدا نمودن سطرهای انتخاب شده باید کل لیست را از اول تا آخر پیمایش کنید در حالی که اندیس سطرهای انتخاب شده در خصوصیت SelectedRows قرار دارد و به راحتی می توان به اندیس سطرهای انتخاب شده دسترسی داشت.

SqlCommand cmd =new SqlCommand();
for (int i = 0; i < dataGridView1.SelectedRows.Count; i++)
{
cmd =new SqlCommand("delete from Table_Gallery where Gallery_ID =" +
dataGridView1.Rows[dataGridView1.SelectedRows[i].Index].Cells[0].Value, cn);
cmd.ExecuteNonQuery();
}