用DataGrid瀏覽資料

來源:互聯網
上載者:User
datagrid|資料

資料相關執行個體:





資料集

Friend WithEvents Ds1 As DGDataViewSample.Dataset1




Dataset1為項目中的資料集架構檔案,結構包括兩個表:tablePerson和tableType





資料庫連接變數

Friend WithEvents ODC As System.Data.OleDb.OleDbConnection




本例使用Access資料庫,所以資料庫連接使用OleDbConnection類型。針對不同3資料庫類型,.NET提供不同的資料庫連接類。

例如SQL Server資料庫需要使用SqlConnection,ODBC資料來源使用OdbcConnection,Oracle資料庫需要使用OracleConnection。





資料配接器

Friend WithEvents ODDAPerson As System.Data.OleDb.OleDbDataAdapter



Friend WithEvents ODDAType As System.Data.OleDb.OleDbDataAdapter




與資料庫連接類似,對於不同的資料庫類型,需要使用不同的資料配接器類。

例如SQL Server資料庫需要使用SqlDataAdapter,ODBC資料來源使用OdbcDataAdapter,Oracle資料庫需要使用OracleDataAdapter。

資料配接器的屬性可以通過工具列添加,按照嚮導提示完成即可;可以在設計時在屬性視窗中進行配置;可以在編程時用代碼設定。一個資料配接器相當於一個資料通道,負責將資料來源中的資料填充到相應的資料集或資料表中,在完成對資料集或資料表的修改之後,再通過資料配接器將更新後的資料提交到資料庫的源表中。通過修改相應的SQL語句,可以用編程式控制制資料配接器,使其匹配資料來源中不同的表或視圖。

本例為方便起見,為每一個表使用了單獨的資料配接器和資料檢視。





資料檢視

Friend WithEvents DVPerson As System.Data.DataView



Friend WithEvents DVType As System.Data.DataView




本例中使用資料檢視作為DataGrid的資料來源。資料集和資料表也可以直接作為資料來源使用。


資料初始化:


在初始化介面時,需要做兩件事情,一個是初始化資料(本例中為InitData過程),將資料來源中的資料填充到資料執行個體中;另一個是適當設定視窗中的某些控制項屬性(本例中為InitCtrl過程),以使資料能夠正確的顯示出來。





初始化資料

Private Sub InitData()



Try



ODC.Open()



Catch ex As Exception



MsgBox(ex.Message)



Application.Exit()



End Try







Try



ODDAPerson.Fill(Ds1.tablePerson)



ODDAType.Fill(Ds1.tableType)



Catch ex As Exception



MsgBox(ex.Message)



Application.Exit()



End Try



End Sub







初始化視窗控制項

Private Sub InitUI()



LBTable.SelectedIndex = 0



DG.Select(0)



End Sub





資料瀏覽導航:


按鈕第一個

Private Sub BFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BFirst.Click



DG.UnSelect(DG.CurrentRowIndex)



Dim dv As DataView



dv = DG.DataSource



If dv.Table.Rows.Count > 0 Then



DG.CurrentRowIndex = 0



DG.Select(DG.CurrentRowIndex)



End If



End Sub







按鈕上一個

Private Sub BPrev_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BPrev.Click



DG.UnSelect(DG.CurrentRowIndex)



Dim dv As DataView



dv = DG.DataSource



If DG.CurrentRowIndex - 1 <= 0 Then



DG.CurrentRowIndex = 0



Else



DG.CurrentRowIndex = DG.CurrentRowIndex - 1



End If



DG.Select(DG.CurrentRowIndex)



End Sub







按鈕下一個

Private Sub BNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BNext.Click



DG.UnSelect(DG.CurrentRowIndex)



Dim dv As DataView



dv = DG.DataSource



If DG.CurrentRowIndex + 1 >= dv.Table.Rows.Count Then



DG.CurrentRowIndex = dv.Table.Rows.Count - 1



Else



DG.CurrentRowIndex = DG.CurrentRowIndex + 1



End If



DG.Select(DG.CurrentRowIndex)



End Sub





按鈕最後一個

Private Sub BLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BLast.Click



DG.UnSelect(DG.CurrentRowIndex)



Dim dv As DataView



dv = DG.DataSource



DG.CurrentRowIndex = dv.Table.Rows.Count - 1



DG.Select(DG.CurrentRowIndex)



End Sub





資料操作


按鈕添加

Private Sub BAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BAdd.Click



Dim dv As DataView



Dim rowNew As DataRowView



dv = DG.DataSource



rowNew = dv.AddNew()



rowNew.EndEdit()



DG.CurrentRowIndex = dv.Table.Rows.Count - 1



DG.Select(DG.CurrentRowIndex)



End Sub







在調用AddNew添加一條新記錄之後,緊接著調用了EndEdit,這樣是表明這個添加操作已經完成,可以對這個新記錄進行其它任何操作了。在此調用之前,新記錄被認為是正在編輯的記錄,會被鎖定,這時對其進行刪除操作就會引發錯誤,而且這條記錄並不會真正的存入表中。在EndEdit調用之後,新記錄存入表中,但是行狀態被標誌為新增記錄。

這一步完成後,使用者一般會通過表格輸入新記錄的各個欄位值。在程式中,實際上是將這個過程視做對新增記錄的修改。





按鈕刪除

Private Sub BDel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BDel.Click



Dim dv As DataView



dv = DG.DataSource



dv.Delete(DG.CurrentRowIndex)



DG.Select(DG.CurrentRowIndex)



End Sub





按鈕儲存

Private Sub BSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BSave.Click



Me.UpdateData()



End Sub





儲存子過程

Private Sub UpdateData()



Dim addds As DataSet



Dim delds As DataSet



Dim updateds As DataSet



Try



addds = Ds1.GetChanges(DataRowState.Added)



delds = Ds1.GetChanges(DataRowState.Deleted)



updateds = Ds1.GetChanges(DataRowState.Modified)



If addds Is Nothing Then



Else



ODDAPerson.Update(addds)



ODDAType.Update(addds)



End If



If updateds Is Nothing Then



Else



ODDAPerson.Update(updateds)



ODDAType.Update(updateds)



End If



If delds Is Nothing Then



Else



ODDAPerson.Update(delds)



ODDAType.Update(delds)



End If



Catch ex As Exception



MsgBox(ex.Message)



Exit Sub



End Try



Try



DVPerson.Table.AcceptChanges()



DVType.Table.AcceptChanges()



Ds1.AcceptChanges()



Catch ex As Exception



MsgBox(ex.Message)



Exit Sub



End Try



End Sub







* 在為DataTable調用AcceptChanges之後,將清除所有行的狀態標誌,也就是說,程式將無法再區分哪些是新添加的,哪些是被修改後的。所以所有利用行狀態標誌對資料來源進行修改的操作都放在了此調用之前。

* 將各種修改存回資料來源的順序為:添加的行--被修改的行--被刪除的行。以免在操作時發生邏輯錯誤。



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。