PDA

View Full Version : سوال: حذف اطلاعات از بانک توسط چک باکس datagridview



seied javad
سه شنبه 23 اردیبهشت 1393, 01:12 صبح
سلام
من یک بانک با SQL EXPRESS ایجاد کردم و با سی شارپ ارتباطش دادم
من روی فرمم یک دیتا گرید ویو دارم که وقتی فرم لود میشه اطلاعات داخل بانک را داخلش نمایش میده
کنار هر ردیف از اطلاعاتم یک چک باکس قرار دادم و میخوام وقتی تیک خورد دکمه حذف فعال بشه و با زدن دکمه حذف اطلاعات از داخل بانک حذف بشه .
میشه لطفا راهنماییم کنید؟
اینم یک نما از دیتا گرید ویو:
118935

alef.divar
سه شنبه 23 اردیبهشت 1393, 09:00 صبح
سلام
میتونی بز این کد استفاده کنی:

for (int i = 0; i < GridView1.Rows.Count; i++)
{
if (((CheckBox)GridView1.Rows[i].FindControl("IdCheckBox")).Checked == true)
{
strCommand = string.Empty;
strCommand = "DELETE FROM TblMy WHERE MyId=@Id";
cmd = new SqlCommand(strCommand, MyConnection);
cmd.Parameters.Clear();
cmd.Parameters.Add("Id", GridView1.DataKeys[i].Value);
MyConnection.Open();
cmd.ExecuteNonQuery();
MyConnection.Close();
}
}

اما این در صورتی کار میکنه که gridviwe رو دستی بایند کرده باشی.
و کلید جدولت درون datakey gridviwe گداشته باشی.

seied javad
سه شنبه 23 اردیبهشت 1393, 15:48 عصر
سلام
میتونی بز این کد استفاده کنی:

for (int i = 0; i < GridView1.Rows.Count; i++)
{
if (((CheckBox)GridView1.Rows[i].FindControl("IdCheckBox")).Checked == true)
{
strCommand = string.Empty;
strCommand = "DELETE FROM TblMy WHERE MyId=@Id";
cmd = new SqlCommand(strCommand, MyConnection);
cmd.Parameters.Clear();
cmd.Parameters.Add("Id", GridView1.DataKeys[i].Value);
MyConnection.Open();
cmd.ExecuteNonQuery();
MyConnection.Close();
}
}

اما این در صورتی کار میکنه که gridviwe رو دستی بایند کرده باشی.
و کلید جدولت درون datakey gridviwe گداشته باشی.

عزیز خیلی ممنون ولی من چیزی متوجه نشدم.
من فقط یک دکمه داخل برنامه میخوام که ردیفی که چک باکس خورده را حذف کنه.
اگر میشه یکم واضح تر توضیح بدید ممنون میشم

alef.divar
سه شنبه 23 اردیبهشت 1393, 18:27 عصر
کد مربط به gridviwe و نحوه ی پر کردنش رو بزار.

seied javad
سه شنبه 23 اردیبهشت 1393, 18:45 عصر
کد مربط به gridviwe و نحوه ی پر کردنش رو بزار.

این کد فرم لود م:

SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Environment.CurrentDirectory + "\\databace.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
SqlDataAdapter da = new SqlDataAdapter ("Select * from books",con);
con.Open();
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
con.Close();

}
void fillgride()
{

SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Environment.CurrentDirectory + "\\databace.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
SqlDataAdapter da = new SqlDataAdapter("Select * from books", con);
con.Open();
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
con.Close();
textBox1.Text = "";
textBox2.Text = "";
}


اینم عکسش:
118981

اینم دکمه درج در بانک:(insert)

private void button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Environment.CurrentDirectory + "\\databace.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");


con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "insert into books (bname,family)"
+ " values ('"+textBox1 .Text +"','"+textBox2 .Text +"')";
cmd.ExecuteNonQuery();
MessageBox.Show("sucssiful");
con.Close();
fillgride();
}
اینم عکسش:
118982

با لود شدن فرم اطلاعات بانک همزمان داخل دیتا گرید ویو1 نمایش داده میشه
فقط یک متغیر به نام fill gride هم تعریف کردم که هرجا لازم بود اونو فراخوانی کردم.

alef.divar
سه شنبه 23 اردیبهشت 1393, 19:56 عصر
منظورم از کد gridviwe کدیه که تو فایل *.aspx گریدویو تو میسازه نه کد درون *.aspx یه همچین چیزی:

<asp:GridView ID="gwGhestbandi" runat="server" Width="100%" CellPadding="4" ForeColor="#333333" GridLines="None" >
</asp:GridView>

seied javad
سه شنبه 23 اردیبهشت 1393, 20:54 عصر
منظورم از کد gridviwe کدیه که تو فایل *.aspx گریدویو تو میسازه نه کد درون *.aspx یه همچین چیزی:

<asp:GridView ID="gwGhestbandi" runat="server" Width="100%" CellPadding="4" ForeColor="#333333" GridLines="None" >
</asp:GridView>


میشه قطعه کدی که باید توی دکمه حذف بنویسم را بذارید لطفا

seied javad
چهارشنبه 24 اردیبهشت 1393, 19:39 عصر
کسی نیست بتونه کمکی کنه؟

khokhan
چهارشنبه 24 اردیبهشت 1393, 23:21 عصر
کسی نیست بتونه کمکی کنه؟
.................................................. ..................................:متفکر:


private void button1_Click(object sender, EventArgs e)
{
int ID =int.Parse( dataGridView1.CurrentRow.Cells[1].Value.ToString());
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (Convert.ToBoolean(row.Cells["chkcol"].Value) == true)
{
SqlConnection connection = new SqlConnection(connect);

string sqlStatement = "DELETE FROM kala WHERE kala_code = @kala_code";

try
{
connection.Open();
SqlCommand cmd = new SqlCommand(sqlStatement, connection);
cmd.Parameters.AddWithValue("@kala_code", ID);
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();

}
finally
{
connection.Close();
MessageBox.Show("گزینه مورد نظر از صحن روزگار محو گردید", "شاد باش");
this.Form1_Load(null,null);
}
}
}
}

seied javad
شنبه 27 اردیبهشت 1393, 15:55 عصر
.................................................. ..................................:متفکر:


private void button1_Click(object sender, EventArgs e)
{
int ID =int.Parse( dataGridView1.CurrentRow.Cells[1].Value.ToString());
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (Convert.ToBoolean(row.Cells["chkcol"].Value) == true)
{
SqlConnection connection = new SqlConnection(connect);

string sqlStatement = "DELETE FROM kala WHERE kala_code = @kala_code";

try
{
connection.Open();
SqlCommand cmd = new SqlCommand(sqlStatement, connection);
cmd.Parameters.AddWithValue("@kala_code", ID);
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();

}
finally
{
connection.Close();
MessageBox.Show("گزینه مورد نظر از صحن روزگار محو گردید", "شاد باش");
this.Form1_Load(null,null);
}
}
}
}

یک دنیا تشکر
فقط یک سوال این چرا تکی تکی حذف میکنه
یعنی من اگر دوتا ردیف را چک باکسشو بزنم بازم یکی را حذف میکنه اگر همینم بهم بگی یک دنیا ممنونت میشم و برات دعا میکنم.

khokhan
شنبه 27 اردیبهشت 1393, 16:39 عصر
خودتون فرمودین مکانیزمی باشه که با چک شدن هر ردیف دکمه حذف فعال بشه

من هم به خیال اینکه می خواین آیتم تکی حذف کنین متدی نوشتم تا عملکرد چک باکسها شبیه رادیو باتن باشه

یعنی با انتخاب یک آیتم ، ردیف انتخابی قبلی از حالت انتخاب خارج بشه
حالا اگه دوست دارین چند آیتم هم زمان انتخاب بشه اون متد انتخاب تکی رو کامنت کنین

seied javad
شنبه 27 اردیبهشت 1393, 22:29 عصر
خودتون فرمودین مکانیزمی باشه که با چک شدن هر ردیف دکمه حذف فعال بشه

من هم به خیال اینکه می خواین آیتم تکی حذف کنین متدی نوشتم تا عملکرد چک باکسها شبیه رادیو باتن باشه

یعنی با انتخاب یک آیتم ، ردیف انتخابی قبلی از حالت انتخاب خارج بشه
حالا اگه دوست دارین چند آیتم هم زمان انتخاب بشه اون متد انتخاب تکی رو کامنت کنین

خیلی ممنون واقعا شرمندم تقصیر من بود منظورمو درست بیان نکردم شرمنده
فقط ببخشید من یکم تازه کارم
آیتم انتخاب تکی کدوم یکی ست؟
زحمت دومی که براتون دارم اگر بتونید یک توضیح درمورد قطعه کد های دکمه حذف بدید ممنون میشم

khokhan
شنبه 27 اردیبهشت 1393, 22:38 عصر
خیلی ممنون واقعا شرمندم تقصیر من بود منظورمو درست بیان نکردم شرمنده
فقط ببخشید من یکم تازه کارم
آیتم انتخاب تکی کدوم یکی ست؟
زحمت دومی که براتون دارم اگر بتونید یک توضیح درمورد قطعه کد های دکمه حذف بدید ممنون میشم
متد انتخاب تکی این قسمته که بایستی کامنتش کنین تا بشه چند گزینه رو هم زمان انتخاب کرد:

private void chkBoxChange(object sender, EventArgs e)
{
for (int k = 0; k <= dataGridView1.RowCount - 1; k++)
{
this.dataGridView1[0, k].Value = this.chkbox.Checked;
}
this.dataGridView1.EndEdit();
}
کدهای قسمت حذف هم چیز مشکلی نداره فقط ابتدا می آد همه ردیفهای گرید رو توی یه حلقه چک می کنه و ردیفهایی رو که چک شدن می شماره وبعد هم که کدهای حذف برای ردیفهای چک شده هست

seied javad
یک شنبه 28 اردیبهشت 1393, 00:38 صبح
متد انتخاب تکی این قسمته که بایستی کامنتش کنین تا بشه چند گزینه رو هم زمان انتخاب کرد:

private void chkBoxChange(object sender, EventArgs e)
{
for (int k = 0; k <= dataGridView1.RowCount - 1; k++)
{
this.dataGridView1[0, k].Value = this.chkbox.Checked;
}
this.dataGridView1.EndEdit();
}
کدهای قسمت حذف هم چیز مشکلی نداره فقط ابتدا می آد همه ردیفهای گرید رو توی یه حلقه چک می کنه و ردیفهایی رو که چک شدن می شماره وبعد هم که کدهای حذف برای ردیفهای چک شده هست

یعنی من باید دقیقا همین قطعه کدو به برنامم اضافه کنم؟
من اضافه کردم ولی به chkbox گیر میده من اونو عوض کردم و نوشتم chkcol(اسم ستونی که به دیتا گرید ویو اضافه کردم و نقش چک باکس کنار هر ردیف را دارد) ولی بعدش به رویداد Checked گیر داد چون اصلا همچین رویدادی نداره.
این قطعه کدو دقیقا باید کجا بذارم؟

khokhan
یک شنبه 28 اردیبهشت 1393, 07:12 صبح
یعنی من باید دقیقا همین قطعه کدو به برنامم اضافه کنم؟
من اضافه کردم ولی به chkbox گیر میده من اونو عوض کردم و نوشتم chkcol(اسم ستونی که به دیتا گرید ویو اضافه کردم و نقش چک باکس کنار هر ردیف را دارد) ولی بعدش به رویداد Checked گیر داد چون اصلا همچین رویدادی نداره.
این قطعه کدو دقیقا باید کجا بذارم؟
می بخشین من متوجه منظورتون نشده بودم :لبخند:

بهتره حلقه ای رو که در رویداد کلیک دکمه حذف هست تغییر بدین تا تعداد سطر های چک شده رو بشمره و دستور رو برای هر تک تک ردیفها اعمال کنه !!!!

پس با این حساب کدهای کلید حذفتون بایستی به این شکل باشه


private void button1_Click(object sender, EventArgs e)
{
int ID =int.Parse( dataGridView1.CurrentRow.Cells[1].Value.ToString());
for (int row = 0; row < dataGridView1.Rows.Count; row++)
{
if (Convert.ToBoolean(dataGridView1.Rows[row].Cells["chkcol"].Value) == true)
{
SqlConnection connection = new SqlConnection(connect);

string sqlStatement = "DELETE FROM kala WHERE kala_code = @kala_code";

try
{
connection.Open();
SqlCommand cmd = new SqlCommand(sqlStatement, connection);
cmd.Parameters.AddWithValue("@kala_code", ID);
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();

}
finally
{
connection.Close();
MessageBox.Show("گزینه مورد نظر از صحن روزگار محو گردید", "شاد باش");
this.Form1_Load(null,null);
}
}
}
}

seied javad
یک شنبه 28 اردیبهشت 1393, 20:42 عصر
می بخشین من متوجه منظورتون نشده بودم :لبخند:

بهتره حلقه ای رو که در رویداد کلیک دکمه حذف هست تغییر بدین تا تعداد سطر های چک شده رو بشمره و دستور رو برای هر تک تک ردیفها اعمال کنه !!!!

پس با این حساب کدهای کلید حذفتون بایستی به این شکل باشه


private void button1_Click(object sender, EventArgs e)
{
int ID =int.Parse( dataGridView1.CurrentRow.Cells[1].Value.ToString());
for (int row = 0; row < dataGridView1.Rows.Count; row++)
{
if (Convert.ToBoolean(dataGridView1.Rows[row].Cells["chkcol"].Value) == true)
{
SqlConnection connection = new SqlConnection(connect);

string sqlStatement = "DELETE FROM kala WHERE kala_code = @kala_code";

try
{
connection.Open();
SqlCommand cmd = new SqlCommand(sqlStatement, connection);
cmd.Parameters.AddWithValue("@kala_code", ID);
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();

}
finally
{
connection.Close();
MessageBox.Show("گزینه مورد نظر از صحن روزگار محو گردید", "شاد باش");
this.Form1_Load(null,null);
}
}
}
}

عزیز این بازم همون مشکل را داره وقتی دوتا ردیف از دیتاگرید ویو را انتخاب میکنم دوتاش انتخاب میشه ولی یکی که اول انتخاب شده را حذف می کنه و دومی هست.
؟

aslan
یک شنبه 28 اردیبهشت 1393, 21:25 عصر
سلام

کد this.Form1_Load(null,null); را بیرون از حلقه for قرار بدین
در ضمن بهتره که تغییراتی در کدها اعمال کنید که کلیه ردیفهایی که قراره حذف بشه به یکباره حذف بشه و نه هر کد کالا بصورت جداگانه . مثلا کد کالای ردیفهایی که قراره حذف بشه در یک متغیر بریزید و در نهایت با استفاده از مثلا کد
Delete From Kala Where Kala_Code IN (4,8,12) عملیات حذف را انجام بدید و ...............
موفق باشید

seied javad
یک شنبه 28 اردیبهشت 1393, 21:47 عصر
سلام

کد this.Form1_Load(null,null); را بیرون از حلقه for قرار بدین
در ضمن بهتره که تغییراتی در کدها اعمال کنید که کلیه ردیفهایی که قراره حذف بشه به یکباره حذف بشه و نه هر کد کالا بصورت جداگانه . مثلا کد کالای ردیفهایی که قراره حذف بشه در یک متغیر بریزید و در نهایت با استفاده از مثلا کد
Delete From Kala Where Kala_Code IN (4,8,12) عملیات حذف را انجام بدید و ...............
موفق باشید

سلام عزیز من کد
this.Form1_Load(null,null);
را بیرون حلقه for قرار دادم ولی فقط فقط مسیج باکس را دوبار نمایش داد و بازم همون مشکل را دارم که دوتا را باهم حذف نمیکنه.
؟

aslan
دوشنبه 29 اردیبهشت 1393, 00:10 صبح
خب.کد زیر هم باید داخل حلقه for باشه :
int ID =int.Parse( dataGridView1.CurrentRow.Cells[1].Value.ToString());
در واقع بشکل زیر :
int ID =int.Parse(dataGridView1.Rows[row].Cells[1].Value.ToString());

seied javad
دوشنبه 29 اردیبهشت 1393, 12:29 عصر
خب.کد زیر هم باید داخل حلقه for باشه :
int ID =int.Parse( dataGridView1.CurrentRow.Cells[1].Value.ToString());
در واقع بشکل زیر :
int ID =int.Parse(dataGridView1.Rows[row].Cells[1].Value.ToString());

کد اولتو داخل حلقه گذاشتم ولی بازم همون مشکل بود
کد دومتونم گذاشتم یکی را حذف کرد و بعد این error را داد:
119219

seied javad
دوشنبه 29 اردیبهشت 1393, 13:22 عصر
خب.کد زیر هم باید داخل حلقه for باشه :
int ID =int.Parse( dataGridView1.CurrentRow.Cells[1].Value.ToString());
در واقع بشکل زیر :
int ID =int.Parse(dataGridView1.Rows[row].Cells[1].Value.ToString());

سلام من قطعه کد :
this.Form1_Load(null, null);
را بیرون حلقه for قرار دادم
و
دستور :
int ID =int.Parse(dataGridView1.Rows[row].Cells[1].Value.ToString());
را داخل حلقه.
الان دوتا را ردیف را بخوام حذف کنم حذف می کنه ولی بازم این ERROR را نمایش میده :
119222

الان قطعه کد دکمه حذفم این شده:

private void button3_Click(object sender, EventArgs e)
{
// int ID = int.Parse(dataGridView1.CurrentRow.Cells[1].Value.ToString());
for (int row = 0; row < dataGridView1.Rows.Count; row++)
{
int ID = int.Parse(dataGridView1.Rows[row].Cells[1].Value.ToString());
if (Convert.ToBoolean(dataGridView1.Rows[row].Cells["chkcol"].Value) == true)
{
SqlConnection connection = new SqlConnection(@"Data Source=.;Initial Catalog=sjh;Integrated Security=True;Pooling=False");

string sqlStatement = "DELETE FROM farsh WHERE fid = @fid";

try
{
connection.Open();
SqlCommand cmd = new SqlCommand(sqlStatement, connection);
cmd.Parameters.AddWithValue("@fid", ID);
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();

}
finally
{
connection.Close();
MessageBox.Show("گزینه مورد نظر از صحن روزگار محو گردید", "شاد باش");

}

}

}
this.Form1_Load(null, null);


}

این دیگه آخراشه لطفا راهنماییم کنیم تا تمومش کنم لطفا .
؟

khokhan
سه شنبه 17 تیر 1393, 09:40 صبح
سلام من قطعه کد :
this.Form1_Load(null, null);
را بیرون حلقه for قرار دادم
و
دستور :
int ID =int.Parse(dataGridView1.Rows[row].Cells[1].Value.ToString());
را داخل حلقه.
الان دوتا را ردیف را بخوام حذف کنم حذف می کنه ولی بازم این ERROR را نمایش میده :
119222

الان قطعه کد دکمه حذفم این شده:

private void button3_Click(object sender, EventArgs e)
{
// int ID = int.Parse(dataGridView1.CurrentRow.Cells[1].Value.ToString());
for (int row = 0; row < dataGridView1.Rows.Count; row++)
{
int ID = int.Parse(dataGridView1.Rows[row].Cells[1].Value.ToString());
if (Convert.ToBoolean(dataGridView1.Rows[row].Cells["chkcol"].Value) == true)
{
SqlConnection connection = new SqlConnection(@"Data Source=.;Initial Catalog=sjh;Integrated Security=True;Pooling=False");

string sqlStatement = "DELETE FROM farsh WHERE fid = @fid";

try
{
connection.Open();
SqlCommand cmd = new SqlCommand(sqlStatement, connection);
cmd.Parameters.AddWithValue("@fid", ID);
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();

}
finally
{
connection.Close();
MessageBox.Show("گزینه مورد نظر از صحن روزگار محو گردید", "شاد باش");

}

}

}
this.Form1_Load(null, null);


}

این دیگه آخراشه لطفا راهنماییم کنیم تا تمومش کنم لطفا .
؟

.................................

Iran58
دوشنبه 23 تیر 1393, 16:14 عصر
.................................................. ..................................:متفکر:


private void button1_Click(object sender, EventArgs e)
{
int ID =int.Parse( dataGridView1.CurrentRow.Cells[1].Value.ToString());
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (Convert.ToBoolean(row.Cells["chkcol"].Value) == true)
{
SqlConnection connection = new SqlConnection(connect);

string sqlStatement = "DELETE FROM kala WHERE kala_code = @kala_code";

try
{
connection.Open();
SqlCommand cmd = new SqlCommand(sqlStatement, connection);
cmd.Parameters.AddWithValue("@kala_code", ID);
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();

}
finally
{
connection.Close();
MessageBox.Show("گزینه مورد نظر از صحن روزگار محو گردید", "شاد باش");
this.Form1_Load(null,null);
}
}
}
}
سلام
مهندس جان دلیل استفاده ازtryو finally چیست مگر بدون آینها کار انجام نمی شود

abbas.oveissi
دوشنبه 23 تیر 1393, 16:45 عصر
سلام
مهندس جان دلیل استفاده ازtryو finally چیست مگر بدون آینها کار انجام نمی شود

try و Catch و finally برای Exception Handling هستند و بدون اینها هم برنامه کار میکنه.
البته فکرکنم ایشون اشتباه از finally استفاده کرده اند،یعنی حتی اگر برنامه به دیتابیس وصل نشه به کاربر پیام میده که گزینه حذف شده است!!!!

khokhan
دوشنبه 23 تیر 1393, 17:17 عصر
try و Catch و finally برای Exception Handling هستند و بدون اینها هم برنامه کار میکنه.
البته فکرکنم ایشون اشتباه از finally استفاده کرده اند،یعنی حتی اگر برنامه به دیتابیس وصل نشه به کاربر پیام میده که گزینه حذف شده است!!!!
heee:لبخند:
چون کد داخل حلقه هست هربار که حلقه دور می زنه پیغام می ده

abbas.oveissi
دوشنبه 23 تیر 1393, 17:38 عصر
heee:لبخند:
چون کد داخل حلقه هست هربار که حلقه دور می زنه پیغام می ده برا همین نگانده از finally یا همون فن مشهور کلک مرغابی استفاده کرده تا شر بخوابه :لبخند::لبخند::قهقهه:

خب الان من اشتباه گفتم ؟! :لبخند: آخه اصن نیازی نیست اون MessageBox اونجا باشه.بعد اصولا میگن Try-Catch نه Try-Finally ،اینجا اصن Catch هم استفاده نشده:لبخند:

2887501
سه شنبه 19 آبان 1394, 20:56 عصر
فکر کنم Id باید بایند بشه یعنی روی مثلث کوچک کنار چک باکس داخل گریدویوو کلیک کنید و ("Eval ("ID نوشته بشه