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)
فرض کنین ما با 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)