حذف سطرهای تیک خورده از DataGridView
در این پست می خواهم که نحوه ی حذف چندین سطر موجود در Datagridview که با استفاده از Checkbox تیک خورده اند را به شما آموزش دهم . کاربر با استفاده از Checkbox چندین سطر را علامت می زند و سپس بر روی دکمه ی Delete کلیک می کند . بعد از تایید حذف ، سطر ها از بانک اطلاعاتی حذف می شوند . فرض کنید که در بانک اطاعاتی یک جدول با مشخصات زیر وجود دارد :
همچنین برای نمونه 2 سطر را به این جدول اضافه می کنیم :
یک کنترل Datagridview و یک Button را بر روی فرم قرار دهید :
فضای نام های زیر را به کلاس فرم اضافه کنید :
private void DataBind() { dataGridView1.DataSource = null; using (SqlConnection SqlConnection1 = new SqlConnection(connectionString)) { using (SqlCommand SqlCommand1 = new SqlCommand("SELECT CustomerId as [شماره], CustomerName as [نام], CustomerFamily as [نام خانوادگی] FROM Customers", SqlConnection1)) { SqlCommand1.CommandType = CommandType.Text; using (SqlDataAdapter SqlDataAdapter1 = new SqlDataAdapter(SqlCommand1)) { using (DataTable DataTable1 = new DataTable()) { SqlDataAdapter1.Fill(DataTable1); dataGridView1.DataSource = DataTable1; } } } } } private const string connectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\siavash\Documents\Visual Studio 2012\Projects\PhoneBookNotThreeLayer\frmMain\bin\Debug\DataBase.mdf;Integrated Security=True;Connect Timeout=30"; public Form1() { InitializeComponent(); //تعیین تعداد ستون های دیتاگرید ویو this.dataGridView1.ColumnCount = 3; this.dataGridView1.AllowUserToAddRows = false; //اضافه کردن ستون ها به دیتاگرید ویو dataGridView1.Columns[0].Name = "CustomerId"; dataGridView1.Columns[0].HeaderText = "شماره"; dataGridView1.Columns[0].DataPropertyName = "شماره"; dataGridView1.Columns[0].Width = 100; dataGridView1.Columns[1].HeaderText = "نام"; dataGridView1.Columns[1].Name = "Name"; dataGridView1.Columns[1].DataPropertyName = "نام"; dataGridView1.Columns[1].Width = 100; dataGridView1.Columns[2].Name = "Family"; dataGridView1.Columns[2].HeaderText = "نام خانوادگی"; dataGridView1.Columns[2].DataPropertyName = "نام خانوادگی"; dataGridView1.Columns[2].Width = 100; DataGridViewCheckBoxColumn checkBoxColumn = new DataGridViewCheckBoxColumn(); checkBoxColumn.HeaderText = ""; checkBoxColumn.Width = 30; checkBoxColumn.Name = "checkBoxColumn"; this.dataGridView1.Columns.Insert(0, checkBoxColumn); //اضافه کردن داده های موجود در پایگاه داده به دیتاگرید ویو this.DataBind(); }
متد DataBind با استفاده از کلاس های SqlConnection و SqlDataAdapter داده های موجود در جدول Customers پایگاه داده را واکشی می کند و در Datagridview نمایش می دهد . چون برای اضافه کردن ستون ها از خاصیت DataPropertyName استفاده کردیم ، SqlDataAdapter داده ها رو در ستون هایی که قبلا اضافه کردیم قرار می دهد .
و در اخر باید کد های لازم برای حذف سطر ها را در رویداد کلیک دکمه ی Button قرار دهیم . کاربر ابتدا سطر های که قصد دارد حذف کند را علامت میزند و سپس بر روی این دکمه کلیک می کند ، بعد از تایید حذف ، سطر ها از Datagridview و پایگاه داده حذف می شوند. بر روی دکمه دوبار کلیک کرده و کد زیر را در رویداد کلیک ان بنویسید :
private void button1_Click(object sender, EventArgs e) { List<DataGridViewRow> selectedRows = (from row in dataGridView1.Rows.Cast<DataGridViewRow>() where Convert.ToBoolean(row.Cells["checkBoxColumn"].Value) == true select row).ToList(); if (MessageBox.Show( "تایید حذف","آیا مایل به حذف سطر ها می باشید ؟", MessageBoxButtons.YesNo) == DialogResult.Yes) { foreach (DataGridViewRow row in selectedRows) { using (SqlConnection SqlConnection1= new SqlConnection(connectionString)) { using (SqlCommand SqlCommand1= new SqlCommand("DELETE FROM Customers WHERE CustomerId = @CustomerId", SqlConnection1)) { SqlCommand1.CommandType = CommandType.Text; SqlCommand1.Parameters.AddWithValue("@CustomerId", row.Cells["CustomerId"].Value); SqlConnection1.Open(); SqlCommand1.ExecuteNonQuery(); SqlConnection1.Close(); } } } this.DataBind(); } }
ابتدا با استفاده از یک کوئری Linq سطرهایی که علامت خورده باشند را مشخص می کنیم سپس با استفاده از یک حلقه foreach تک تک آنها را حذف می کنیم .
دست خوش لطفا ادامه بدید
مرسی، حتما
با سلام ، تشکر و خسته نباشید
ذکاه العلم نشره
بسیار عالی بود
.من الله التوفیق