PDA

View Full Version : مشکل در دیتاگرید و دیتابیس اکسس



samiasoft
جمعه 11 فروردین 1396, 14:28 عصر
سلام دوستان

در طراحی دیتابیس کدوم حالت زیر بهتره ؟
حالت اول سورس دیتاگرید را برابر دیتاتیبل قرار بدیم
حالت دوم سورس دیتاگرید برابر BindingSource قرار بدیم


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

samiasoft
پنج شنبه 17 فروردین 1396, 01:58 صبح
ممنون از دوستان که کمکی در این رابطه نکردند:لبخند: من بدین صورت اومدم نوشتم ....ممنون میشوم نظراتتون رو در این باره بگید ....

ستون های جدولم : esm,dat,fnumber,numer,IDNumber نام جدول : Table2
نکته : ستون IDNumber ازنوع نامبر هست و کلید اصلی دیتابیس می باشد.

Imports System.Data.OleDb
Module Module1
Public connect As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "/data.mdb")

End Module

Imports System.Data.OleDb
Imports System.Data.Common


Dim strsql As String
Dim Bs As New BindingSource
Dim da As New OleDbDataAdapter
Dim ds As New DataSet
Dim DataRow As DataRow
Dim tblmap As DataTableMapping


Private Sub dbgrid()

connect.Close()
connect.Open()
strsql = "select esm,dat,fnumber,numer,IDNumber from Table2 Order By IDNumber "
da = New OleDbDataAdapter(strsql, connect)


tblmap = da.TableMappings.Add("Table", "Table2")
ds.Clear()
da.Fill(ds, "Table2")
Bs.DataSource = ds
Bs.DataMember = "Table2"
DataGridView1.DataSource = Bs

connect.Close()

End Sub


جهت ثبت اطلاعات
If DataGridView1.Rows.Count < 1 Then 'وقتی که ردیف خالی هست
TextBox5.Text = 1
Else
Dim m As Integer = DataGridView1.Rows.Count - 1
TextBox5.Text = DataGridView1.Rows(m).Cells(4).Value + 1
End If


Dim CB As New OleDbCommandBuilder(da)
DataRow = ds.Tables(0).NewRow
DataRow("esm") = TextBox4.Text
DataRow("dat") = TextBox3.Text
DataRow("fnumber") = TextBox2.Text
DataRow("numer") = TextBox1.Text
DataRow("IDNumber") = TextBox5.Text
ds.Tables("Table2").Rows.Add(DataRow)


da.InsertCommand = CB.GetInsertCommand
da.Update(ds)

جهت ویرایش :
Dim i As Integer = DataGridView1.SelectedRows(0).Index
ds.Tables("Table2").Rows(i).Item("esm") = TextBox4.Text
ds.Tables("Table2").Rows(i).Item("dat") = TextBox3.Text
ds.Tables("Table2").Rows(i).Item("fnumber") = TextBox2.Text
ds.Tables("Table2").Rows(i).Item("numer") = TextBox1.Text


Dim CB As New OleDbCommandBuilder(da)
da.UpdateCommand = CB.GetUpdateCommand
da.Update(ds)

جهت حذف

Dim i As Integer = DataGridView1.SelectedRows(0).Index
ds.Tables(0).Rows(i).Delete()
Dim Cb As New OleDbCommandBuilder(da)
da.DeleteCommand = Cb.GetDeleteCommand
da.Update(ds, "Table")

جهت جستجو :
Dim FILD As String
FILD = "esm"
Bs.Filter = FILD & " like '%" & TextBox6.Text & "%' "

قکر میکنم بهینه تراین روش در این زمینه باشه یا اینکه اشتباه میکنم ؟

samiasoft
پنج شنبه 17 فروردین 1396, 03:37 صبح
آیا در کدهای بالا دستور زیر هم بایستی بنویسم هنگام حذف یا ثبت یا ویرایش؟

ds.Tables(0).AcceptChanges()