使用BindingNavigator和BindingSource保存数据时出现问题 [英] Problems saving data using BindingNavigator and BindingSource

查看:86
本文介绍了使用BindingNavigator和BindingSource保存数据时出现问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,

有人可以重新检查我的逻辑吗?

我正在尝试将Customers表单中的数据写入dbo。 SFDC_SQL_MDI数据库中的tblCustomers表无法正常工作。

在frmCustomer_Load事件中,我填充了Customers和Countries数据表。将表的列绑定到Customers表单上的适当控件。最后,我将组合框设置为没有选择

Private Sub frmCustomers_Load(sender As Object, _
                                  e As EventArgs) _
                                  Handles Me.Load
        dtCustomers = objSQL.dt_MSSQL_Retrive_Data(strSQLCnn, "tblCustomers")
        dtCountries = objSQL.dt_MSSQL_Retrive_Data(strSQLCnn, "tblCountries")
        Call bs_Customers(dtCustomers, dtCountries)
        'Set the ComboBoxes.SelectedIndex to -1
        'No Selection made
        Country.SelectedIndex = -1
        State.SelectedIndex = -1
End Sub


控件绑定例程是:

Private Sub bs_Customers(ByVal dtCustomers As DataTable, _
                             ByVal dtCountries As DataTable)
        'Purpose:       Binds the Form to the appropriate text 
        '               or combo boxes on the frmCustomers form
        'Parameters:    dtCountries As DataTable - tblCountries in Database
        '               dtCustomers As DataTable - tblCustomers in Database
        '               dtStates As DataTable - tblStates in Database
        'Returns:       Nothing - Information is bound to the form

        'Set BindingSources
        'Me.bsCountries = New BindingSource
        'Me.bsCountries.DataSource = dtCountries
        Me.bsCustomers = New BindingSource
        Me.bsCustomers.DataSource = dtCustomers
        'Me.bsCity = New BindingSource
        'Me.bsCity.DataSource = dtCity

        'Have the controls been data bound?
        If Customer.DataBindings.Count > 0 Then
            Exit Sub
        Else
            'Binding the controls to the appropate DataColumn(Field)
            'Deactivated because the User does not need to see it
            'txtCustID.DataBindings.Add() _
            '     ("Text", Me.bsCustomers, "CustID")
            Customer.DataBindings.Add _
                ("Text", Me.bsCustomers, "CustName", True)
            Identifier.DataBindings.Add _
                ("Text", Me.bsCustomers, "Identifier", True)
            Address1.DataBindings.Add _
                ("Text", Me.bsCustomers, "Address_1", True)
            Address2.DataBindings.Add _
                ("Text", Me.bsCustomers, "Address_2", True)
            Country.DataBindings.Add("SelectedValue", _
                                     Me.bsCustomers, _
                                     "CountryID", True)
            'Sets specific properties for the ComboBox
            Country.ValueMember = "CountryID"
            Country.DisplayMember = "Country"
            Country.DataSource = dtCountries

            State.DataBindings.Add("SelectedValue", Me.bsCustomers, "StateID", True)
            txtZip.DataBindings.Add _
                ("Text", Me.bsCustomers, "Zip", True)

            navCustomers.BindingSource = Me.bsCustomers
        End If
End Sub


要"保存"的代码Customers表单中的信息是:

Private Sub SaveToolStripButton_Click(sender As Object, _
                                          e As EventArgs) _
                                          Handles SaveToolStripButton.Click
        'Purpose:           Save changes into the Customers Table
        'Local Variables:   daSQL As SqlDataAdapter
        '                   cbSQL As SqlCommandBuilder
        '                   strSQL As String
        'Returns:           Nothing - Table is updated inside the subroutine
        Dim daSQL As SqlDataAdapter
        Dim cbSQL As SqlCommandBuilder
        Dim strSQL As String
        'End edits to Navigator control
        navCustomers.BindingSource.EndEdit()
        Using cnn As New SqlConnection(strSQLCnn)
            Try
                If cnn.State = ConnectionState.Open Then
                    cnn.Close()
                Else
                    cnn.Open()
                    strSQL = "SELECT * FROM dbo.tblCustomers;"
                    daSQL = New SqlDataAdapter(strSQL, cnn)
                    'Build Commands for add, delete, and update
                    cbSQL = New SqlCommandBuilder(daSQL)
                    'Update the Customer table
                    daSQL.Update(bsCustomers.DataSource)
                    Msg = "The dbo.tblCustomers table from the SFDC_SQL_MDI " & _
                          "database has been successfully updated."
                    MessageBox.Show(Msg)
                End If
            Catch ex As Exception
                'Log error 
                Dim el As New Log.ErrorLogger
                el.WriteToErrorLog(ex.Message, ex.StackTrace, "Error")
            End Try
        End Using
End Sub


我想我在SaveToolStripButton_Click事件中没有正确使用。当我逐步完成事件时,我激活了DataSet Visualizer
daSQL.Update(bsCustomers.DataSource)
它显示一个空表。

I think I am not using something properly in the SaveToolStripButton_Click event. When I step through the event I activated I the DataSet Visualizer at daSQL.Update(bsCustomers.DataSource) It shows an empty table.

< span style ="background:white; margin:0px">

MRM256

推荐答案

看起来你正在制作它远比它应该复杂得多。

It looks like you are making it far more sophisticated than it should be.

您的问题,也许是您在更新之前没有在绑定源上调用.EndEdit的事实,或者至少我没有看到您的调用代码任何地方

Your problem, maybe the fact you are not calling .EndEdit on the bindingsource prior to the update, or at least I dont see the call in your code anyplace


这篇关于使用BindingNavigator和BindingSource保存数据时出现问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆