PDA

View Full Version : سوال: حذف یک رکورد از datagridview



karshenasi
جمعه 03 دی 1389, 16:34 عصر
با سلام
من اطلاعات یک دیتا بیس متصل به SQL رو با DataGridView نمایش دادم
حالا برای حذف یک رکورد در این دیتا بیس میخام در دکمه حذف کدی بنویسم که وقتی روش کلیک میشه رکورد انتخاب شده در datagridwview رو از توی دیتا بیس پاک کنه؟ خیلی جستجو کردم ولی تاپیکی که بتونه به شکل ساده راهنمایی کنه پیدا نکردم.

ممنون

bad_boy_2007
جمعه 03 دی 1389, 17:54 عصر
کجای کار مشکل دارید ؟

مراحل :
1- ابتدا ردیف ID یا هر فیلد دیگری که کلید اصلی جدول است و هم اکنون انتخاب شده را بگیرید
2-یک شی از نوع Command ایجاد کنید و کوئری Delete from Table Where ID=X را که در اینجا X همان ردیف انتخاب شده است را اجرا نمایید
3-داده های منبع داده گرید را پاک کنید و مجدد داده ها را واکشی نمایید

karshenasi
جمعه 03 دی 1389, 18:57 عصر
ممنون
میشه همینو به صورت کد بگید ؟

mansourii
جمعه 03 دی 1389, 21:27 عصر
با استفاده از این کد وقتی روی سطر مورد نظر کلیک میکنید و دکمه حذف رو کلیک میکنید. سطر حذف میشود

Private Sub Button35_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button35.Click
For i As Integer = 0 To DataGridView4.RowCount - 1
If DataGridView4.Rows(i).Selected = True Then
Dim MyConnection As New SqlConnection("Data Source=(local);Initial Catalog=DB_library;Integrated Security=True")
If ConnectionState.Closed Then MyConnection.Open()
Dim MyCommand As New SqlCommand
MyCommand.CommandText = "delete from Viw_book where [كد كتاب] = '" + TextBox_searchBook.Text.Trim() + "'"
MyCommand.Connection = MyConnection
MyCommand.ExecuteNonQuery()

MsgBox("اطلاعات وارد شده با موفقیت حذف شد", MsgBoxStyle.Information, "پیام")
MyConnection.Close()
End If
Next
End Sub

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

Dim MyConnection As New SqlConnection("Data Source=(local);Initial Catalog=DB_library;Integrated Security=True")
If ConnectionState.Closed Then MyConnection.Open()
Dim MyCommand As New SqlCommand
MyCommand.CommandText = "delete from Viw_book where [كد كتاب] = '" + TextBox_searchBook.Text.Trim() + "'"
MyCommand.Connection = MyConnection
MyCommand.ExecuteNonQuery()

MsgBox("اطلاعات وارد شده با موفقیت حذف شد", MsgBoxStyle.Information, "پیام")
MyConnection.Close()
End If

mansourii
جمعه 03 دی 1389, 21:36 عصر
:خجالت: این قطعه کد، برای کتابخونه بوده!

جایی ایراد داشت بگو تا توجیح کنم! البته نیازی به توضیحات نداره/دوستمون خوب توضیح دادن

tto_baran
جمعه 03 دی 1389, 21:54 عصر
با سلام
من اطلاعات یک دیتا بیس متصل به SQL رو با DataGridView نمایش دادم
حالا برای حذف یک رکورد در این دیتا بیس میخام در دکمه حذف کدی بنویسم که وقتی روش کلیک میشه رکورد انتخاب شده در datagridwview رو از توی دیتا بیس پاک کنه؟ خیلی جستجو کردم ولی تاپیکی که بتونه به شکل ساده راهنمایی کنه پیدا نکردم.

ممنون
دوست عزيز چرا كار را براي خودت دشوار ميكني ميتواني اول ركورد را از دتا بيس حذف كني بعد دوباره ديتا گريد را از ديتا ست پركني

karshenasi
جمعه 10 دی 1389, 19:23 عصر
ممنون

میشه بگید منظور از این خط چیه ؟


MyCommand.CommandText = "delete from Viw_book where [كد كتاب] = '" + TextBox_searchBook.Text.Trim() + "'"مگه نباید رکورد انتخاب شده در datagridview پاک شود ؟

TextBox_searchBook.Text.Trim به چی اشاره میکنه ؟

mansourii
جمعه 10 دی 1389, 21:03 عصر
سلام/
خوب معلومه دیگه:
از جدول Viw_book

برای اینکه SQL Server من 2000 بود مجبور بودم برای اینکه فیلدهام رو فارسی نمایش بده در قسمت View فارسیشون کنم/ یعنی فیلدها در Table و فارسی کردن اونها در View و بعد اسم view رو نشون دادم View_book (یعنی بجایی که اسم جدول رو بنویسم اسم View رو نوشتم)
مثال قرار بود بنویسم
delete from table_book where Co_id ='"+textbox+'",connetion
اون رو نوشتم

در مورد Trim
این کد یعنی Trim اگه کاربر اسپیس رو زده باشه اسپیس رو حذف میکنه ( یعنی از سمت چی و راست فضاهای خالی رو حذف میکنه)
LTrim از چی حافظه های خالی رو حذف میکنه
Rtrim از سمت راست حذف میکنه
Trim هم از دو طرف حذف میکنه (اینو محض احتیاط گذاشته بودم)

karshenasi
یک شنبه 12 دی 1389, 01:05 صبح
سلام/
خوب معلومه دیگه:
از جدول Viw_book

برای اینکه SQL Server من 2000 بود مجبور بودم برای اینکه فیلدهام رو فارسی نمایش بده در قسمت View فارسیشون کنم/ یعنی فیلدها در Table و فارسی کردن اونها در View و بعد اسم view رو نشون دادم View_book (یعنی بجایی که اسم جدول رو بنویسم اسم View رو نوشتم)
مثال قرار بود بنویسم
delete from table_book where Co_id ='"+textbox+'",connetion
اون رو نوشتم

در مورد Trim
این کد یعنی Trim اگه کاربر اسپیس رو زده باشه اسپیس رو حذف میکنه ( یعنی از سمت چی و راست فضاهای خالی رو حذف میکنه)
LTrim از چی حافظه های خالی رو حذف میکنه
Rtrim از سمت راست حذف میکنه
Trim هم از دو طرف حذف میکنه (اینو محض احتیاط گذاشته بودم)


راستش نام جدول ها رو در یک متغیر به نام chng ریختم و با توجه به شرایط فرق میکنه
حالا دستور اس کیو ال برای این خط به چه صورت میشه ؟


MyCommand.CommandText = "delete from Viw_book where [كد كتاب] = '" + TextBox_searchBook.Text.Trim() + "'"

حالا اگه به جای Viw_book که نام جدول هست من متغیر chng که نام جدول من رو مشخص میکنه بنویسم
به جای کد کتاب که نام ستون در شرط اس کبو ال هست چیه بنویسم ؟
بعد من میخام رکورد سلکت شده در datagridview پاک بشه. خب تکست باکس که توی شرط اس کیو ال اومده چه ربطی به datagridview داره ؟
ممنونم

mansourii
یک شنبه 12 دی 1389, 13:31 عصر
سلام رفیق از این روش کار کن


Private Sub DeleteSelecedRows()
Dim ObjConnection As New FbConnection()
Dim i As Integer
Dim mResult
mResult = MsgBox("Want you really delete the selected records?", _
vbYesNo + vbQuestion, "Removal confirmation")
If mResult = vbNo Then
Exit Sub
End If
ObjConnection.ConnectionString = _ "servertype=0;username=sysdba;password=masterkey;da tabase=" & My.Application.Info.DirectoryPath & "\mydb.gdb"
Dim ObjCommand As New FbCommand()
ObjCommand.Connection = ObjConnection
For i = Me.DataGridView1.SelectedRows.Count - 1 To 0 Step -1
ObjCommand.CommandText = "delete from mytable where counter='" & _ DataGridView1.SelectedRows(i).Cells("counter").Value & "'"
ObjConnection.Open()
ObjCommand.ExecuteNonQuery()
ObjConnection.Close()

Me.DataGridView1.Rows.Remove(Me.DataGridView1.Sele ctedRows(i))
Next

End Sub

mansourii
یک شنبه 12 دی 1389, 13:33 عصر
اینم یک روش دیگه (رکورد هایی که انتخاب کردید رو حذف میکنه)
فقط باید خاصیت Multi Select دیتا گرید ویو شما True باشد

Private Sub btnDeleteRow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDeleteRow.Click
TestDataSet.NameTable.Rows(DataGridView1.CurrentRo w.Index).Delete()
NameTableTableAdapter.Update(TestDataSet.NameTable )
End Sub

karshenasi
سه شنبه 12 بهمن 1389, 16:29 عصر
اینم یک روش دیگه (رکورد هایی که انتخاب کردید رو حذف میکنه)
فقط باید خاصیت Multi Select دیتا گرید ویو شما True باشد

Private Sub btnDeleteRow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDeleteRow.Click
TestDataSet.NameTable.Rows(DataGridView1.CurrentRo w.Index).Delete()
NameTableTableAdapter.Update(TestDataSet.NameTable )
End Sub

سلام
این کد خیلی ساده به نظر میرسه ولی جواب نمیده
اگه میشه یه بار دیگه چکش کنید
مثلا بعد از نام دیتا ست و نام جدول .Rows(DataGridView1.CurrentRo w.Index).Delete() رو نمیشه استفاده کرد