BindingSource的EndEdit方法注意事项

BindingSource的EndEdit方法与DataAdapter的Update,在提交到数据库时候需要注意所绑定的DataTable是否直接关联DataSet与DataAdapter,否侧无法正常提交到数据库文件,只能提交到Table里面。随后需要自己写方法从Table提交到数据库。

若使用的Table关联了DataSet与DataAdapter,则BindingSource的EndEdit方法与DataAdapter的Update可正常提交。

Code:

    Dim mdt As DataTable
    Public Sub DoWork()
        '根据Id加载方案列表
        If TParam.WellProperty Is Nothing Then
            Exit Sub
        End If
        Dim sqls As String = String.Format("select * from designresult where id='{0}'", TParam.WellProperty.ID)
        mdt = SQLHelper.Query(sqls, "designResult")
        bSource.DataSource = mdt
        bNavigator.BindingSource = bSource
        dgv1.DataSource = bSource

    End Sub


    Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
        Try
            dgv1.EndEdit()
            bSource.EndEdit()
            '这里datasource的endedit只是提交到datatable,因为这个dt并不是直接关联dataAdapter的,因此endedit无法提交到实体数据库
            SQLHelper.ExecuteDT(mdt, "designresult")
        Catch ex As Exception
            Common.ExcNow(ex)
        End Try
   End Sub

<think>嗯,我现在需要介绍一下BindingSource。首先,我记得BindingSource是.NET Framework中的一个组件,特别是在Windows Forms数据绑定时使用的。那它的主要作用是什么呢?可能和连接数据源与UI控件有关吧。 对了,BindingSource可以简化数据绑定过程。比如,当要把一个数据库的表显示在DataGridView里,可能需要写很多代码来连接数据库、获取数据、绑定到控件。而BindingSource可以作为中间层,管理数据源和控件之间的交互,比如导航、更新、过滤等。 不过,具体怎么用呢?可能要先创建一个BindingSource实例,然后把它的DataSource属性设置为实际的数据源,比如DataTable、List之类的。接着把控件的数据源设为这个BindingSource,这样控件就能显示数据了。这样的话,当数据变化时,BindingSource会自动处理更新,对吧? 另外,BindingSource还有哪些功能呢?比如排序、过滤,可能通过Filter和Sort属性来实现。比如设置Filter为"Name LIKE 'A%'",就能只显示名字以A开头的记录。还有,添加、删除记录可能通过AddNew、RemoveCurrent等方法,这样就不用直接操作数据源了。 还有,CurrencyManager的概念,BindingSource可能封装了这个,管理当前记录的位置。比如在绑定到多个控件时,比如TextBox和DataGridView,BindingSource能确保它们同步显示同一行数据。 不过,用户可能需要一个例子。比如,创建一个Windows Forms应用,拖放一个BindingSource组件到窗体,然后设置DataSource为某个List,再绑定到DataGridView或者TextBox。然后通过按钮来导航记录,或者过滤数据。 需要注意的是,BindingSource和BindingNavigator控件一起使用,可以方便地添加导航按钮,比如上一条、下一条,这些按钮会自动绑定到BindingSource方法。 还有,可能的问题,比如数据源更新后如何刷新显示?可能需要调用ResetBindings方法。或者,如何处理数据验证?可能在BindingSource的事件中处理,比如CurrentItemChanged。 不过,有没有可能混淆BindingSource和其他数据绑定方式,比如直接绑定到DataTable?需要说明使用BindingSource的好处,比如解耦数据源和UI,提供额外的功能层。 总之,BindingSource是数据绑定中的中间人,简化了操作,提供了更多的控制功能。需要分点介绍它的作用、常用属性和方法,以及使用场景和示例。</think>在 .NET Framework(尤其是 Windows Forms 开发)中,**BindingSource** 是一个关键组件,用于简化数据绑定和控件交互。以下是分步介绍: --- ### **一、BindingSource 的作用** 1. **数据中介** - 作为数据源(如数据库、集合)与 UI 控件(如 DataGridView、TextBox)之间的桥梁。 - 解耦数据源和控件,避免直接操作底层数据。 2. **功能增强** - 支持排序(`Sort`)、过滤(`Filter`)、导航(移动记录指针)和编辑数据。 - 封装了 `CurrencyManager`,管理当前记录的定位和同步。 --- ### **二、核心属性** | 属性 | 说明 | |------------------|----------------------------------------------------------------------| | `DataSource` | 绑定到实际数据源(如 DataTable、List、对象集合、数据库查询结果)。 | | `DataMember` | 指定数据源中的子列表(例如 DataSet 中的某个表名)。 | | `Filter` | 设置过滤条件(如 `"Age > 30"`),仅显示符合条件的记录。 | | `Sort` | 指定排序字段(如 `"Name ASC"`)。 | | `Current` | 获取当前记录的对象。 | --- ### **三、常用方法** | 方法 | 说明 | |---------------------|----------------------------------------------------------------------| | `AddNew()` | 向数据源添加新记录(自动提交或通过 `EndEdit()` 提交)。 | | `RemoveCurrent()` | 删除当前记录。 | | `MoveNext()` / `MovePrevious()` | 导航到下一条/上一条记录。 | | `Find()` | 根据指定属性和值查找记录(如 `Find("ID", 5)`)。 | --- ### **四、典型使用场景** #### 1. **绑定 DataGridView** ```csharp // 创建数据源 List<Person> people = GetPeopleFromDatabase(); // 绑定到 BindingSource BindingSource bindingSource = new BindingSource(); bindingSource.DataSource = people; // 将 DataGridView 绑定到 BindingSource dataGridView1.DataSource = bindingSource; ``` #### 2. **绑定 TextBox(单个字段)** ```csharp textBoxName.DataBindings.Add("Text", bindingSource, "Name"); // TextBox 会显示当前记录的 Name 字段,修改后自动更新数据源 ``` #### 3. **过滤和排序** ```csharp // 显示年龄大于 30 的记录,按姓名排序 bindingSource.Filter = "Age > 30"; bindingSource.Sort = "Name ASC"; ``` #### 4. **与 BindingNavigator 配合** - 拖放 `BindingNavigator` 控件到窗体,设置其 `BindingSource` 属性。 - 自动生成导航按钮(如前进、后退),无需手动编写导航逻辑。 --- ### **五、注意事项** 1. **数据更新** - 修改数据后,调用 `bindingSource.ResetBindings(false)` 刷新控件显示。 2. **事件处理** - 通过 `CurrentItemChanged`、`ListChanged` 等事件响应数据变化。 3. **性能优化** - 对大型数据集建议使用虚拟模式或分页,避免直接绑定全部数据。 --- ### **六、简单示例** ```csharp // 初始化数据源 var data = new List<Person> { new Person { Name = "Alice", Age = 25 }, ... }; BindingSource bindingSource = new BindingSource { DataSource = data }; // 绑定控件 dataGridView1.DataSource = bindingSource; textBoxName.DataBindings.Add("Text", bindingSource, "Name"); // 添加新记录 bindingSource.AddNew(); bindingSource.Current = new Person { Name = "Bob", Age = 30 }; bindingSource.EndEdit(); // 过滤数据 bindingSource.Filter = "Age >= 18"; ``` 通过 `BindingSource`,开发者可以更高效地管理数据与 UI 的交互,减少样板代码,提升可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值