摘要:呆呆同學的問題與解答
親愛的呆呆同學, 你的需求其實很單純, 不致需要用到虛擬模式的作法. 虛擬模式有其特定的用途, 尤其當資料來源本身沒有運算欄位時, 亦或是您要對資料來源的存取作業作完全掌控的時候, 就可以使用虛擬模式. 虛擬模式的寫法看似複雜, 卻擁有最高的彈性.
以你的需求來說, 程式這樣寫即可:
Option Strict On
Public Class Form2
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' 建立資料表
Dim myTable As New DataTable
' 建立「編號」欄位
myTable.Columns.Add("編號", System.Type.GetType("System.Int32"))
myTable.Columns("編號").AllowDBNull = False
myTable.Columns("編號").AutoIncrement = True
myTable.Columns("編號").AutoIncrementSeed = 1
myTable.Columns("編號").AutoIncrementStep = 1
' 建立「存款」欄位
myTable.Columns.Add("存款", System.Type.GetType("System.Double"))
myTable.Columns("存款").AllowDBNull = False
' 建立「支出」欄位
myTable.Columns.Add("支出", System.Type.GetType("System.Double"))
myTable.Columns("支出").AllowDBNull = False
' 建立「餘額」欄位
myTable.Columns.Add("餘額", _
System.Type.GetType("System.Double"), "存款- 支出")
' 將「餘額」欄位設定成一個唯讀欄位
myTable.Columns("餘額").ReadOnly = True
Me.DataGridView1.DataSource = myTable
End Sub
Private Sub DataGridView1_DataError(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) _
Handles DataGridView1.DataError
MessageBox.Show(e.ToString)
End Sub
End Class