PDA

View Full Version : اگر سطری خطا داشت، فقط اون سطر ذخیره نشه



Developer Programmer
پنج شنبه 24 بهمن 1387, 20:48 عصر
ویرایش شد
فرض کنین ما با GetChange تغییرات اعمال شده رو گرفتیم و بررسی کردیم که فلان ستون مقدار مناسب داشته باشه و میخوایم از بین همه تغییرات اعمالی، فقط اون سطری رو که مشکل داشته ذخیره نشه و بقیه سطرها ذخیره بشه.

من تا اینجا پیش رفتم


Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click

Dim TempDataSet As DataSet = New DataSet()
Dim found As Boolean = False

If myDataset.HasChanges Then

Me.BindingContext(myDataset, "employees").EndCurrentEdit()

TempDataSet = myDataset.GetChanges

For Each dr As DataRow In TempDataSet.Tables(0).Rows
If Not dr.RowState = DataRowState.Deleted Then
If dr("Title").ToString() = String.Empty Then
MsgBox("ستون عنوان تهی است")
' reject only unwanted row!
dr.RejectChanges()
End If
End If
Next

myDataAdapter.Update(TempDataSet.Tables(0))
myDataset.AcceptChanges()

btnReload_Click(sender, e)
End If
End Sub
واسه Refresh کردن هم از کد زیر استفاده میکنم


Private Sub btnReload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReload.Click

myCommand.CommandText = "Select [EmployeeID],[Firstname],[LastName],[Title] From Employees"

Select Case myConnection.State
Case ConnectionState.Closed
myConnection.Open()
Case ConnectionState.Open
myDataset.Clear()
End Select
myDataAdapter.Fill(myDataset, "Employees")

With DataGridView1
.DataSource = myDataset
.DataMember = "Employees"
End With
End Sub

Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click

Me.BindingContext(myDataset, "Employees").CancelCurrentEdit()
If myDataset.HasChanges Then myDataset.RejectChanges()
End Sub
منتها یه مشکل کوچولو هست! واسه Refresh کردن هیچ راهی جز DataSet.Tables(0).clear به فکرم نرسید... اینکار در مورد کوئریهای بزرگ و حجیم پدر سیستم رو در میاره:ناراحت: چیکار کنم؟!

در مورد Delet هم این مشکل رو دارم

Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click

' Calling RemoveAt is the same as calling Delete and then calling AcceptChanges.
Dim currentID As Integer = 0
currentID = Me.BindingContext(myDataset, "Employees").Position
myDataset.Tables(0).Rows.RemoveAt(currentID)