0

SQL Server テーブルがあり、このテーブルの対応する列にコントロールをバインドしようとしています (EF4 を使用しています)。列の 1 つは、コントロールtime(0)にバインドされているデータ型です。DateTimePicker

ピッカーのカスタム形式はHH:mm. NULLDB テーブルの値も処理する必要があるため、カスタム ハンドラーFormatParseイベント ハンドラーを追加しました。DB 列はピッカーのTextプロパティにバインドされており、ピッカーは値を含む DB テーブルの時間値を正しく表示しNULLます。(プロパティを試しましたValueが、ピッカーは DB 値を正しく表示しませんでした)。

問題は、私が行うcontext.SaveChanges()と、ピッカー値を除いてすべての値がDBに保存されることです。エラー メッセージなどは表示されないため、ピッカーが値を保存できない理由がわかりません。ピッカー値のみを変更しても、DB テーブルには影響がないようです。

任意のヘルプや提案をいただければ幸いです。

これが私のコードです:

Private Sub MyScreen_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    Dim b As Binding = MyTimePicker.DataBindings.Item("Value")
    AddHandler b.Format, New ConvertEventHandler(AddressOf dtp_Format)
    AddHandler b.Parse, New ConvertEventHandler(AddressOf dtp_Parse)

    context = New MyDBEntities()
    Me.ProductsBindingSource.DataSource = context.Products
End Sub

Private Sub dtp_Format(sender As Object, e As ConvertEventArgs)
    Dim bnd As Binding = CType(sender, Binding)
    If bnd IsNot Nothing Then
        Dim dtp As DateTimePicker = CType(bnd.Control, DateTimePicker)
        If dtp IsNot Nothing Then
            If e.Value Is Nothing Then
                dtp.Checked = False
                e.Value = dtp.Value
            Else
                dtp.Checked = True
                dtp.Value = dtp.Value.Date + e.Value
            End If
        End If
    End If
End Sub

Private Sub dtp_Parse(sender As Object, e As ConvertEventArgs)
    Dim bnd As Binding = CType(sender, Binding)
    If bnd IsNot Nothing Then
        Dim dtp As DateTimePicker = CType(bnd.Control, DateTimePicker)
        If dtp IsNot Nothing Then
            If Not dtp.Checked Then
                dtp.ShowCheckBox = True
                dtp.Checked = False
                e.Value = DBNull.Value
            Else
                Dim val As DateTime = Convert.ToDateTime(e.Value)
                e.Value = New Nullable(Of DateTime)(val)
            End If
        End If
    End If
End Sub

アップデート

OK、ピッカーのデータ バインディングをValueではなくプロパティにバインドするように変更し、ピッカーが正しい値を表示するようTextにコードを変更しました。dtp_Format

ピッカーの検証に問題があるようで、ピッカーの値を DB に保存できない可能性があります。ピッカーの値を変更して別のフィールドに移動しようとすると、Validatingイベントは発生しますがイベントは発生Validatedせず、フォーカスは次のフィールドに移動せず、フォームを閉じることができません。イベントDateTime.TryParse(MyTimePicker.Value, tmp)の中に入れると、 が返されます。私が設定した場合、問題はなくなりましたが、それでもピッカーの値は DB に保存されません。ValidatingTrueCausesValidation = False

また、デバッグ中に、e.Value内部dtp_FormatのメソッドがタイプであるのTimeSpanに対し、e.Value内部dtp_Parseはタイプであることに気付きましDateTimeた。多分それが問題の原因ですか?のコードTimeSpan内で使用しようとしましたが、役に立ちませんでした。DateTimedtp_Parse

4

0 に答える 0