1

次のようにカスタムプロパティを追加したテキストボックスからカスタムコントロールを継承しました

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プロパティを変更すると変更されます

4

0 に答える 0