PDA

View Full Version : حذف سطر انتخابی



khz-web1
پنج شنبه 13 تیر 1387, 00:19 صبح
سلام

من یه دیتا گرید دارم و یک باتون روی فرم ...

حالا می خوام کاربر سطر خودشو تو گرید انتخاب کنه و با زدن روی دکمه پیغامی مبنی بر این که آیا شما می خواهید این رکورد حذف شود مواجه بشه و بعد با YES زدن اون پیغام رکورد حذف شود ......
ب تشکر

ALI TT
پنج شنبه 13 تیر 1387, 17:29 عصر
اگر از BindingSource استفاده می کنید ؛ ردیفی را که از DatagridVew انتخاب کردید را با کلید Del پاک کرده و از کد زیر استفاده کنید


DataGridView1.Update()

از کدهای زیر هم می توانید استفاده کنید



If MessageBox.Show("Are You Sure ?", "Q", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then

OleDbDataAdapter1.DeleteCommand.CommandText = "DELETE FROM [Name Column] WHERE [NameC] = '" & DataGridView1.SelectedRows.Item(0).Cells(0).Value. ToString & "'"
OleDbDataAdapter1.DeleteCommand.ExecuteNonQuery()

End If

و یا



If MessageBox.Show("Are You Sure ?", "Q", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then

TableAdapter.Adapter.DeleteCommand.CommandText = "DELETE FROM [Name Column] WHERE [NameTable] = '" & DataGridView1.SelectedRows.Item(0).Cells(0).Value. ToString & "'"
TableAdapter.Update(DataDataSet.[Name Table])

End If

رضا عربلو
پنج شنبه 13 تیر 1387, 17:36 عصر
اگر DataGridView ات به یک BindingSource بایند شده است. من از کد زیر برای پیدا کردن سطر مربوطه در Datatable استفاده می کنم.


((bs.Current as system.Data.DataRowView).Row as StudentRow).Delete

bs نام BindingSource ت است.
StudentRow نوع DataRow در دیتا تیبل ات است.

khz-web1
پنج شنبه 13 تیر 1387, 19:43 عصر
از تمامی دوستان نهایت تشکر را دارم ولی از اقای alitt چند تا سوال داشتم .....

به کد زیر توجه فرمایید




da.DeleteCommand.CommandText = "DELETE FROM [Name Column] WHERE [NameC] = '" & DataGridView3.SelectedRows.Item(0).Cells(0).Value. ToString & "'"
da.DeleteCommand.ExecuteNonQuery()



کد بالا یه جا زده Name Column من باید جای این اسم جدولم رو بزارم یا چیزه دیگه ای .... همچنین NameC جای این چی بزارم .....

از دیتا ادپتر من هم ایراد می گیره .... زیرش خط کشیدم.....

با تشکر فراوان از شما

ALI TT
جمعه 14 تیر 1387, 00:05 صبح
دوست عزیز
به جای Name Column باید نام ستونی رو که مثلا نام ها رو نگه میداره وارد کنی

من توی کد بالا چنین چیزی نوشتم NameC !!!
به جای NameTable نام جدول رو وارد کن

درضم کارکتر [] را از کدهایت حذف کن . اونا رو برای مشخص کردن زدم.

برای این از دیتا آداپترت ایراد میگیره چون اصلا به فرم اونو اضافه نکردی .


یه پروژه برای مثال برات ضمیمه کردم . اونو نگاه کن هم چی دستت میاد


ــــــ اگه بازم کمک خواستی بگو تا کمکت کنم

khz-web1
جمعه 14 تیر 1387, 01:13 صبح
دوست من از این خط ایراد میگیره


da.DeleteCommand.CommandText = "DELETE FROM table1 WHERE firstname = '" & DataGridView3.SelectedRows.Item(0).Cells(0).Value. ToString & "'"

عکس ارور هم اینجا گزاشتم ....
http://i32.tinypic.com/x5seg2.jpg

با تشکر فراوان

ALI TT
جمعه 14 تیر 1387, 03:13 صبح
این بخاطر این که پراپرتی Datagrid خودت رو درستت ست نکردی

این کار را بکن درست میشه :

دیتا گرید را انتخاب کن ..... از پنجره پراپرتیس گزینه ی SelectionMode را به FullRowSelect تغییر دهید 100% جواب میده .

khz-web1
جمعه 14 تیر 1387, 14:04 عصر
باز هم جواب نداد .....
یه نمونه پروژه دیگه اگه بزاری ممنون می شم .... که فایل خود vs.net2005 هم توش باشه.....
با تشکر

bahar2008
جمعه 14 تیر 1387, 14:35 عصر
این هم کدی که برای حذف می خوای دوست عزیز
البته قبلش دیتا گریدت رو به بانکت وصل کن .... من خودم که این کد رو به کار بردم درست جواب داد



Dim cn As New SqlClient.SqlConnection
cn.ConnectionString = "Data Source=.......;Initial Catalog=.....;Integrated Security=True"
Dim cmd As New SqlClient.SqlCommand
Try
cn.Open()
cmd.Connection = cn
cmd.CommandType = Data.CommandType.Text
cmd.CommandText = "delete from dade2 where iddade=" & DataGridView1.CurrentRow.Cells(0).Value
cmd.ExecuteNonQuery()
Dade2TableAdapter.Update(ProjectDataSet2.dade2)
Me.Dade2TableAdapter.Fill(Me.ProjectDataSet2.dade2 )
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
cn.Close()
MessageBox.Show("حذف با موفقیت انجام شد ")
End Try



در اینجا dade2 نام table هست و DataGridView1.CurrentRow.Cells(0).Value هم نام اون ردیفی در دیتاگریدم هست که iddade رو به این ردیف وصل کردم

khz-web1
جمعه 14 تیر 1387, 14:56 عصر
از تمامی دوستان نهایت تشکر را دارم .....

این کدی است که من استفاده می کنم


Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;data source=D:\db1.mdb")
Dim ds As New DataSet


Dim sql As String
If MessageBox.Show("Are You Sure ?", "Q", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
con.Open()

sql = "DELETE FROM table1 WHERE firstname = '" & DataGridView3.CurrentRow.Cells(0).Value & "'"
Dim da As OleDbDataAdapter = New OleDbDataAdapter(sql, con)
da.DeleteCommand.CommandText = sql
da.DeleteCommand.ExecuteNonQuery()
da.Update(ds, "table1")
da.Fill(ds, "table1")
con.Close()
End If


به نظر شما مشکل از کجاست ...

ALI TT
جمعه 14 تیر 1387, 16:22 عصر
مشکل از اینجاست


sql = "DELETE FROM table1 WHERE firstname = '" & DataGridView3.CurrentRow.Cells(0).Value & "'"

اینو امتحان کن :


sql = "DELETE FROM table1 WHERE firstname = '" & DataGridView3.CurrentRow.Cells(0).Value.ToString & "'"

khz-web1
جمعه 14 تیر 1387, 16:57 عصر
باز هم جواب نداد .....

ALI TT
جمعه 14 تیر 1387, 18:05 عصر
یه نمونه پروژه دیگه اگه بزاری ممنون می شم .... که فایل خود vs.net2005 هم توش باشه.....

نمیشه چون من VS.net 2008 دارم و تو همون پروژه ای که ضمیمه کردم هم کدش هست و هم فایلش

اگر تو میتونی : اونجایی که با خطا مواجه میشی رو توی یه پروژه درست کن برام بزار



یه راه دیگه :

برای شیء دیتا آداپترت Delete Command رو تعریف کردی ( از توی قسمت پراپرتیس) ؟؟؟؟؟؟؟؟

khz-web1
جمعه 14 تیر 1387, 19:28 عصر
سلامی دوباره ...:لبخندساده:

این فایل پروژه من هستش ......


با تشکر فراوان از شما :خجالت:

ALI TT
جمعه 14 تیر 1387, 23:01 عصر
بزار یه چیزی بت بگم

چرا اینقدر اصرار داری که همه کدهای برنامه رو خودت بنویسی . منظورم تعریف OleDb هستش.

ببین ؛ من همیشه این کار رو میکنم این طوری خود آدم هم گیج نمیشه .

از توی منوی Tools > گزینه Choose Toolbox Items رو انتخاب کن ؛ بعد
از زبانه NET Framework Components گزینه هایی که در زیر نوشتم رو تیک بزن :

OleDbCommand
OleDbCommandBuilder
OleDbDataAdapter
OleDbConnection

وقتی این کار رو کردی ، دیتا آداپتر به تول باکست اضافه میشه . اونو روی فرم بزار ...بعد خودش مثل ویزارد ازت وصل شدن به یک بانک رو می خواد ....... بعد ازت سوال میکنه بانک اطلاعاتی رو کپی کنم کنار پروژه یا نه ............ بعد Query رو تنظیم می کنی........یعد یه دیتا ست بزار روی فرم ...... وقتی میزاریش دو گزینه رو به تو نشون میده ... دومیش رو انتخاب کن ....... بعد کدهای زیر رو به پروژت اضافه کن ....

ببین من نمی تونم به تو پروژه بدم چون VS من 2008 هستش

در ضم بانک اطلاعاتی رو در کنار فایل exe در پوشه Debug کپی کن


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Try

OleDbConnection1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & My.Computer.FileSystem.CurrentDirectory & "\db1.mdb"

Catch ex As Exception
MessageBox.Show(ex, "No Data Source")
End Try

OleDbConnection1.Open()

DataSet1.Clear()

OleDbDataAdapter1.SelectCommand.CommandText = "select * from Table1"

OleDbDataAdapter1.Fill(DataSet1)

DataGridView1.DataSource = DataSet1.Tables(0)

OleDbConnection1.Close()

DataGridView1.Columns("firstname").HeaderText = "نام کوچک"
DataGridView1.Columns("lastname").HeaderText = "نام خانوادگی"

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


If MessageBox.Show("Are You Sure ?", "Q", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then

OleDbConnection1.Open()

OleDbDataAdapter1.DeleteCommand.CommandText = "DELETE FROM Table1 WHERE firstname = '" & DataGridView1.CurrentRow.Cells(1).Value.ToString & "'"

OleDbDataAdapter1.DeleteCommand.ExecuteNonQuery()


DataSet1.Clear()

OleDbDataAdapter1.Fill(DataSet1)

DataGridView1.DataSource = DataSet1.Tables(0)
End If
End Sub

اگه خواستی آموزش این کار رو بصورت فلش بزارم ؟


این هم کدهای پشت پرده که توی فایل Designer برنامه کپی میشه ... اگه خاصتی کپی کن ...


<Global.Microsoft.VisualBasic.CompilerServices.Desi gnerGenerated()> _
Partial Class Form1
Inherits System.Windows.Forms.Form

'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
MyBase.Dispose(disposing)
End Sub

'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer

'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.Button1 = New System.Windows.Forms.Button
Me.DataGridView1 = New System.Windows.Forms.DataGridView
Me.OleDbSelectCommand1 = New System.Data.OleDb.OleDbCommand
Me.OleDbConnection1 = New System.Data.OleDb.OleDbConnection
Me.OleDbInsertCommand1 = New System.Data.OleDb.OleDbCommand
Me.OleDbDataAdapter1 = New System.Data.OleDb.OleDbDataAdapter
Me.OleDbCommand2 = New System.Data.OleDb.OleDbCommand
Me.OleDbCommand1 = New System.Data.OleDb.OleDbCommand
Me.DataSet1 = New System.Data.DataSet
CType(Me.DataGridView1, System.ComponentModel.ISupportInitialize).BeginIni t()
CType(Me.DataSet1, System.ComponentModel.ISupportInitialize).BeginIni t()
Me.SuspendLayout()
'
'Button1
'
Me.Button1.ForeColor = System.Drawing.SystemColors.ActiveCaption
Me.Button1.Location = New System.Drawing.Point(12, 199)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(75, 23)
Me.Button1.TabIndex = 0
Me.Button1.Text = "Delete"
Me.Button1.UseVisualStyleBackColor = True
'
'DataGridView1
'
Me.DataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeig htSizeMode.AutoSize
Me.DataGridView1.Location = New System.Drawing.Point(12, 12)
Me.DataGridView1.Name = "DataGridView1"
Me.DataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.Ful lRowSelect
Me.DataGridView1.Size = New System.Drawing.Size(402, 181)
Me.DataGridView1.TabIndex = 1
'
'OleDbSelectCommand1
'
Me.OleDbSelectCommand1.CommandText = "SELECT Table1.*" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "FROM Table1"
Me.OleDbSelectCommand1.Connection = Me.OleDbConnection1
'
'OleDbInsertCommand1
'
Me.OleDbInsertCommand1.CommandText = "INSERT INTO `Table1` (`lastname`, `firstname`) VALUES (?, ?)"
Me.OleDbInsertCommand1.Connection = Me.OleDbConnection1
Me.OleDbInsertCommand1.Parameters.AddRange(New System.Data.OleDb.OleDbParameter() {New System.Data.OleDb.OleDbParameter("lastname", System.Data.OleDb.OleDbType.VarWChar, 0, "lastname"), New System.Data.OleDb.OleDbParameter("firstname", System.Data.OleDb.OleDbType.VarWChar, 0, "firstname")})
'
'OleDbDataAdapter1
'
Me.OleDbDataAdapter1.DeleteCommand = Me.OleDbCommand2
Me.OleDbDataAdapter1.InsertCommand = Me.OleDbInsertCommand1
Me.OleDbDataAdapter1.SelectCommand = Me.OleDbSelectCommand1
Me.OleDbDataAdapter1.TableMappings.AddRange(New System.Data.Common.DataTableMapping() {New System.Data.Common.DataTableMapping("Table", "Table1", New System.Data.Common.DataColumnMapping() {New System.Data.Common.DataColumnMapping("lastname", "lastname"), New System.Data.Common.DataColumnMapping("firstname", "firstname")})})
Me.OleDbDataAdapter1.UpdateCommand = Me.OleDbCommand1
'
'OleDbCommand2
'
Me.OleDbCommand2.Connection = Me.OleDbConnection1
'
'OleDbCommand1
'
Me.OleDbCommand1.Connection = Me.OleDbConnection1
'
'DataSet1
'
Me.DataSet1.DataSetName = "NewDataSet"
'
'Form1
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(427, 244)
Me.Controls.Add(Me.DataGridView1)
Me.Controls.Add(Me.Button1)
Me.Font = New System.Drawing.Font("Tahoma", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Name = "Form1"
Me.Text = "Form1"
CType(Me.DataGridView1, System.ComponentModel.ISupportInitialize).EndInit( )
CType(Me.DataSet1, System.ComponentModel.ISupportInitialize).EndInit( )
Me.ResumeLayout(False)

End Sub
Friend WithEvents Button1 As System.Windows.Forms.Button
Friend WithEvents DataGridView1 As System.Windows.Forms.DataGridView
Friend WithEvents OleDbSelectCommand1 As System.Data.OleDb.OleDbCommand
Friend WithEvents OleDbConnection1 As System.Data.OleDb.OleDbConnection
Friend WithEvents OleDbInsertCommand1 As System.Data.OleDb.OleDbCommand
Friend WithEvents OleDbDataAdapter1 As System.Data.OleDb.OleDbDataAdapter
Friend WithEvents OleDbCommand2 As System.Data.OleDb.OleDbCommand
Friend WithEvents OleDbCommand1 As System.Data.OleDb.OleDbCommand
Friend WithEvents DataSet1 As System.Data.DataSet

End Class

khz-web1
جمعه 14 تیر 1387, 23:03 عصر
اگه بزاری ممنون می شوم ....

khz-web1
جمعه 14 تیر 1387, 23:37 عصر
واقعیتش آقا من نا امید شدم از این کد ها و ساخت چنین برنامه ای .....

باز هم از همون خط ایراد می گیره .......

ALI TT
جمعه 14 تیر 1387, 23:43 عصر
ببین روشت رو عوض کن

من برات میزارم

کمی صبر کن

ALI TT
شنبه 15 تیر 1387, 01:13 صبح
خوب من اومدم

تو عکس ها نشون دادم

کدی همراه عکسها هستش .

نگاه کردی خبره شو بده

khz-web1
شنبه 15 تیر 1387, 01:33 صبح
آقا دستت درد نکنه خیلی زحمت کشیدی.... اینبار دیگه ارور نمیده .... ولی رکورد رو از بانک پاک نمی کنه .... در واقع از گرید پاک میشه و از بانکم پاک نمیشه ....

با تشکر فراوان

khz-web1
شنبه 15 تیر 1387, 04:16 صبح
آقا مشکلم حل شد .....

ولی یه جایی واسم خیلی مبهم مونده.....

اون مشکلی که تو پست بالایی گفتم رو وقتی ویژوال استدیو بازه و پروژه را ران می کنم(دکمه f5 ) میزنم رکورد ها از تو گرید پاک می شوند وای از تو بانک پاک نمی شوند..... ولی اگه بریم تو پوشه bin\Debug
یه فایل EXE از پروژه می بینیم که این مشکل رو نداره فایل EXE برنامه ، رکورد رو هم از تو بانک اطلاعاتی باک می کنه و هم از تو دیتا گرید ..... !!!!
می خواستم بدونم کسی از دوستان علت این مشکل رو میدونه چیه ....

با تشکر فراون از شما جناب ALI TT

ALI TT
شنبه 15 تیر 1387, 18:15 عصر
با تشکر فراون از شما جناب ALI TT
خواهش می کنم وظیفه من بود

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


می خواستم بدونم کسی از دوستان علت این مشکل رو میدونه چیه ....

ببین این مشکل رو من همیشه دارم : مثلا یه موقع میشد یه دکمه را از روی فرم پاک میکردم و قتی برنامه رو Run میکردم ، دکمه هنوز روی فرم بود !!!!!!!

ولی وقتی میرفتم توی پوشه bin\Debug و تمام فایلهای توش رو پاک میکردم و دوباره برنامه رو Run می کردم درست میشد .


فکر کنم این به این علت هستش که برنامه نمیتونه فایلها رو OverWrite .

حالا تو این کار رو بکن شاید مشکله تو هم حل شد.

یا این کار رو بکن : در کنار آیکنی که در ویژوال استدیو کار اجرای برنامه رو میکنه یه کمبو باکس هستش ، اونو از Debug
به
Release
تغییر بده.

توجه کن که وقتی این کار رو میکنی فایل exe پروژه در پوشه bin\Release ساخته میشه.

و بعد می تونی مثل اولش کنی

khz-web1
سه شنبه 26 شهریور 1387, 03:31 صبح
آقا علی به یه مشکل برخوردم ...
اینکه الان من 11 تا ستون دارم وقتی حذف رو بر اساس مثلا firstname میزارم کار حذف بدرستی انجام میشه ، ولی وقتی بر اساس مثلا codperson میزارم حذف رو انجام نمیده !!! یعنی نه ارور میده نه چیزی حذف مکنه ...
با تشکر فراوان