لمزيد من التوضيح:
عملت اتصال لقاعدة البيانات وربط داتا غرايد فيو بأحد جداولها بالشكل التالي:
كود :
ConnString = "Provider=MicroSoft.jet.oledb.4.0;Data Source=" & Application.StartupPath & "\Data.mdb"
con = New OleDbConnection(ConnString)
DS = New DataSet
con.Open()
SQL = "SELECT * FROM Families"
DaFamilies = New OleDbDataAdapter(SQL, con)
DaFamilies.Fill(DS, "Families")
con.Close()
DGVFamilies.AutoGenerateColumns = False
DGVFamilies.DataSource = DS.Tables("Families")
DGVFamilies.Columns(2).DataPropertyName = "Name"
DGVFamilies.Columns(3).DataPropertyName = "personsID"
DGVFamilies.Columns(4).DataPropertyName = "State"
DGVFamilies.Columns(5).DataPropertyName = "ColumnNum"
DGVFamilies.Columns(6).DataPropertyName = "FamilyBookNum"
المشكلة أنه طالما أنا ضمن سطر من أسطر الداتا غرايد تبقى DS.GetChanges = Nothing ولا تأخد التغيرات إلا عندما انتقل لسطر جديد
اي عند الحدث RowLeave تبقى DS.HasChanges = False
ولا تصبح True إلا غند الحدث RowEnter
لا توجد طريقة لجعل DS.GetChanges = Not Nothing عند تغيير خلية من خلايا السطر او عند الحدث RowLeave
أرجو أن تكون وصلت الفكر
ملاحظة : أكثر مايهمني هو الحدثين: RowValidating , RowValidated
عند الحدث RowValidating تكون DS.GetChanges = Nothing
عند الحدث RowValidated تكون DS.GetChanges = Not Nothing
وانا اريد أن تكون DS.GetChanges = Not Nothing عند الحدث RowValidating
انا عملت حل مؤقت لهذه المشكلة بجعل الخلية الحالية بسطر أخر وإرجاعها برمجيا
DGVFamilies.CurrentCell = "Cell at another Row"
DGVFamilies.CurrentCell = "Cell at original Row "
ولكن أكيد يوجد حل آخر