次のようにカスタムプロパティを追加したテキストボックスからカスタムコントロールを継承しました
Dim _MyVal As Object
Public Property MyVal As Object
Get
Return _MyVal
End Get
Set(value As Object)
_MyVal = value
If IsNothing(value) OrElse IsDBNull(value) Then
Me.Text = "Null"
Else
Select Case _MyVal
Case 1
Me.Text = "NewYork"
Case 2
Me.Text = "London"
Case 3
Me.Text = "Zwara"
Case Else
Me.Text = "Unknown"
End Select
End If
End Set
End Property
したがって、次のように、DataGridView とカスタム テキスト ボックスを使用して、このプロパティを単純な WinForm の DataTable フィールドにバインドしました。
Public Class Form10
Dim dtMain As New DataTable
Dim bsMain As New BindingSource
Private Sub Form10_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
dtMain.Columns.Add("Name", GetType(String))
dtMain.Columns.Add("CityID", GetType(Integer))
dtMain.Rows.Add("John", 1)
dtMain.Rows.Add("Steve", 2)
dtMain.Rows.Add("Sara", 3)
dtMain.Rows.Add("Joe", DBNull.Value)
bsMain.DataSource = dtMain
dgv.DataSource = bsMain
txtCity.DataBindings.Add(New System.Windows.Forms.Binding("MyVal", bsMain, "CityID", False, DataSourceUpdateMode.OnPropertyChanged))
dtMain.AcceptChanges()
End Sub
私の問題は、アイテムをナビゲートすると、DataTable が変更されることです。なぜそれが起こるのですか?
フィールドを ComboBoxSelectedValue
プロパティにバインドすると、完全に機能します。ナビゲートによってソースが変更されることはありません。SelectedValue
プロパティを変更すると変更されます