C# BindingSource 未完

  • 数据绑定
  • 导航
  • 事件
  • 数据验证
  • 自定义
  • 示例
  • 示例
  • 总结

C#中, BindingSource 是一个非常有用的控件,它提供了数据绑定的基础设施。 BindingSource 允许开发者将数据源(如数据库、集合、对象等)与用户界面控件(如文本框、下拉列表等)进行绑定,从而实现数据的展示和编辑。

以下是一些关于 BindingSource 的关键点:

数据绑定

BindingSource 可以绑定到多种数据源。以下是一些你可以绑定到 BindingSource 的数据源类型:

  • 列表(List):任何实现了 IList 接口的集合,例如 List<T>、ArrayList 等。
  • 数组(Array):任何类型的数组,如 int[]、string[]、object[] 等。
  • 数据表(DataTable):DataTable 是 DataSet 的一部分,常用于 ADO.NET 应用程序中。
  • 数据集(DataSet):一个包含多个 DataTable 的容器,可以看作是内存中的数据库。
  • 数据视图(DataView):一个 DataTable 的自定义视图,可以用来排序和筛选数据。
  • 实体框架(Entity Framework):使用 Entity Framework 时,可以将 DbSet<T> 或查询结果绑定到 BindingSource。
  • LINQ 查询结果:任何返回序列的 LINQ 查询,如 IEnumerable<T>、IQueryable<T> 等。
  • 自定义集合:任何自定义的集合类,只要它们实现了 IList 或 IBindingList 接口。
  • 单值:虽然不常见,但 BindingSource 也可以绑定到单个对象。

导航

C#Windows窗体应用程序中,BindingSource 组件提供了内置的数据导航功能,允许你轻松地在绑定的数据集中移动。以下是一些常用的导航方法:

  • MoveFirst():将当前记录位置移动到数据集中的第一条记录。
  • MoveLast():将当前记录位置移动到数据集中的最后一条记录。
  • MoveNext():将当前记录位置向前移动一条记录。如果当前已经是最后一条记录,则不会有任何移动。
  • MovePrevious():将当前记录位置向后移动一条记录。如果当前已经是第一条记录,则不会有任何移动。
  • Position 属性:获取或设置当前记录的位置。这个属性是基于0的,所以第一条记录的位置是0

以下是一个简单的例子,展示了如何在Windows窗体应用程序中使用 BindingSource 进行数据导航:

public partial class Form1 : Form
{
    private BindingSource bindingSource1 = new BindingSource();

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        // 假设有一个 DataTable 叫做 myDataTable
        bindingSource1.DataSource = myDataTable;
        dataGridView1.DataSource = bindingSource1;
    }

    private void buttonFirst_Click(object sender, EventArgs e)
    {
        bindingSource1.MoveFirst();
    }

    private void buttonPrevious_Click(object sender, EventArgs e)
    {
        bindingSource1.MovePrevious();
    }

    private void buttonNext_Click(object sender, EventArgs e)
    {
        bindingSource1.MoveNext();
    }

    private void buttonLast_Click(object sender, EventArgs e)
    {
        bindingSource1.MoveLast();
    }
}

在这个例子中,我们创建了一个 BindingSource 对象,并将其绑定到一个 DataGridView 控件。我们还添加了一些按钮,用于导航数据。每个按钮的点击事件都会调用 BindingSource 的相应导航方法,从而在数据集中移动当前记录的位置。

此外,BindingSource 还会触发一些事件,如 PositionChangedCurrentChanged,这些事件在导航操作发生时会触发,允许你执行额外的逻辑,比如更新用户界面以反映当前记录的变化。

事件

BindingSource 支持多种事件,如 CurrentChangedPositionChangedDataSourceChanged 等,这些事件可以在数据或导航状态改变时触发。

数据验证

BindingSource 可以与 BindingNavigator 控件一起使用,提供数据验证和错误处理机制。

自定义

BindingSource 允许开发者自定义数据绑定逻辑,包括数据格式转换、数据过滤等。

示例

下面是一个简单的示例,展示如何在 WinForms 应用程序中使用 BindingSource

// 创建 BindingSource 实例
BindingSource bindingSource = new BindingSource();

// 设置数据源,这里假设有一个名为 customers 的 List<Customer> 类型的数据集合
bindingSource.DataSource = customers;

// 将 BindingSource 绑定到一个 DataGridView 控件
dataGridView1.DataSource = bindingSource;

// 导航到第一条记录
bindingSource.MoveFirst();

// 导航到下一条记录
bindingSource.MoveNext();

在这个示例中,customers 是一个包含 Customer 对象的列表,每个 Customer 对象代表一个客户。通过 BindingSource,我们可以将这个列表绑定到 DataGridView 控件上,从而在界面上展示客户数据。

示例

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace forForm2019 {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e) {
            allStudents.Add(new Student { age = 1, name = "a" });
            allStudents.Add(new Student { age = 1, name = "a" });

            bindingSource1.DataSource = allStudents;
            dataGridView1.DataSource = bindingSource1;

            num.count = allStudents.Count;
            bs_lable.DataSource = num;
            label1.DataBindings.Add("Text", bs_lable, "count");
        }
        List<Student> allStudents = new List<Student>();
        BindingSource bs_lable = new BindingSource();
        Number num = new Number();

        private void button1_Click(object sender, EventArgs e) {
            allStudents.Add(new Student { age = 1, name = "a" });
            num.count = allStudents.Count;

            bindingSource1.ResetBindings(false);
            bs_lable.ResetBindings(false);
        }

    }

    class Student {
        public int age { get; set; }

        public string name { get; set; }
    }

    class Number {
        public int count { get; set; }
        public int index { get; set; }
    }
}

在这里插入图片描述

上述代码有两个绑定,一是ListDataView,二是CountLable,不能绑定单个int,但能绑定类。

总结

BindingSource 是数据绑定中一个非常强大的工具,它简化了数据与UI控件之间的交互,使得数据操作更加直观和方便。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/696036.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

测试基础12:测试用例设计方法-边界值分析

课程大纲 1、定义 经验发现&#xff0c;较多的错误往往发生在输入或输出范围的边界上&#xff0c;因为边界值是代码判断语句的点&#xff0c;一般容易出问题&#xff08;数值写错、多加或丢失等号、写错不等号方向…&#xff09;。所以增加对取值范围的边界数据的测试&#xff…

Vue3父组件如何访问子组件属性和方法

本篇内容主要是父组件如何访问子组件的属性和方法 文章目录 子组件 //son.vue代码const list (info) >{console.log(info) }const name ref("XXXX")//子组件向父组件暴露了一个方法&#xff0c;然后父组件就可以去使用子组件里面的一些属性和方法了 //子组件向…

车载电子电气架构 - 智能座舱技术及功能应用

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

【Vue】请求动态渲染数据

目标 请求获取数据存入 vuex, 映射渲染 安装 axios yarn add axios准备actions 和 mutations App.vue页面中调用 action, 获取数据 验证数据是否存储成功 动态渲染 cart-item.vue

第2回 从0x7c00到0x90000

将数据段寄存器ds的值变成了0x07c0,方便了之后访问内存时利用这个段基址进行寻址,接下来,我们带着这两行代码继续往下看6行: 此时ds寄存器的值已经是0x07c0了,然后用同样的方式将es寄存器的值变成0x9000,接着又把cs寄存器的值变成256。 好的,此时ds,es,cx寄存器的值,都…

Vue学习|Vue快速入门、常用指令、生命周期、Ajax、Axios

什么是Vue? Vue 是一套前端框架&#xff0c;免除原生JavaScript中的DOM操作&#xff0c;简化书写 基于MVVM(Model-View-ViewModel)思想&#xff0c;实现数据的双向绑定&#xff0c;将编程的关注点放在数据上。官网:https://v2.cn.vuejs.org/ Vue快速入门 打开页面&#xff0…

vue-cli是什么?和 webpack是什么关系?

前言 Vue CLI是Vue.js项目的官方脚手架&#xff0c;基于Node.js与Webpack构建。安装Vue CLI前需确保Node.js已安装&#xff0c;随后通过npm全局安装。Vue CLI能迅速创建和管理Vue.js项目&#xff0c;提升开发效率。而Webpack则负责资源打包&#xff0c;通过配置文件管理依赖、插…

【LeetCode算法】第112题:路径总和

目录 一、题目描述 二、初次解答 三、官方解法 四、总结 一、题目描述 二、初次解答 1. 思路&#xff1a;二叉树先序遍历。首先访问根节点&#xff0c;若根节点是叶子节点并且值等于目标值&#xff0c;则返回true&#xff0c;否则递归访问左子树和右子树&#xff0c;只要左…

归并排序的递归与非递归实现

递归实现 归并排序有点类似于二叉树的后序遍历&#xff0c;是一种基于分治思想的排序算法。具体过程如下&#xff1a; 但要注意&#xff0c;在归并时要额外开辟一个与原数组同等大小的空间用来存储每次归并排序后的值&#xff0c;然后再拷贝到原数组中。 代码实现&#xff1a…

Java学习-JDBC(四)

连接池 现有问题 每次操作数据库都需要重新获取新连接&#xff0c;使用完毕后需close释放&#xff0c;频繁的创建和销毁造成资源浪费连接的数量无法把控&#xff0c;对服务器造成巨大压力 连接池 连接池是数据库连接对象的缓冲区&#xff0c;通过配置&#xff0c;由连接池负…

[word] word悬挂缩进怎么设置? #经验分享#职场发展#经验分享

word悬挂缩进怎么设置&#xff1f; 在编辑Word的时候上方会有个Word标尺&#xff0c;相信很多伙伴都没使用过。其实它隐藏着很多好用的功能&#xff0c;今天就给大家分享下利用这个word标尺的悬挂缩进怎么设置&#xff0c;一起来看看吧&#xff01; 1、悬挂缩进 选中全文&…

C语言详解(文件操作)1

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

C++:SLT容器-->deque

C:SLT容器-->deque 1. 构造函数2. deque 赋值操作3. deque 大小操作4. deque 插入和删除5. deque 容器数据存取6. deque 排序操作 双端数组&#xff0c;可以对头部和尾部进行插入删除操作 需要导入头文件#include <deque> 1. 构造函数 deque deqT; // 默认构造函数 de…

⌈ 传知代码 ⌋ 深度知识追踪

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

Ruoyi5.x RuoYi-Vue-Plus新建Translation翻译类

若依框架&#xff08;RuoYi&#xff09;中的Translation翻译类主要作用在于实现字段值的转换或翻译功能&#xff0c;以提高数据展示的准确性和友好性。以下是其具体作用的一些关键点&#xff1a; 字段值转换&#xff1a;若依框架在处理数据时&#xff0c;有时需要将某些字段的…

【Linux多线程】线程的终止、等待和分离

文章目录 线程终止正常退出return 退出pthread_exit函数终止线程 pthread_cancel强制终止线程进程终止 线程等待为什么需要等待线程&#xff1f;pthread_join函数 分离线程pthread_detach函数 线程终止 下面给出终止线程的三种方式&#xff1a; 正常退出&#xff1a; 线程执行…

小冬瓜AIGC 手撕LLM 拼课

小冬瓜aigc手撕LLM学习 官方认证 手撕LLMRLHF速成班-(附赠LLM加速分布式训练超长文档&#xff09; 帮助多名同学上岸LLM方向&#xff0c;包括高校副教授&#xff0c;北美PhD&#xff0c;大厂等 课程名称【手撕LLMRLHF】 授课形式&#xff1a;在线会议直播讲解课后录播 时间&…

祝大家端午节安康

五月到端午&#xff0c;愿你端来快乐&#xff0c;无烦无恼&#xff1b;端来好运&#xff0c;无时无刻&#xff1b;端来健康&#xff0c;无忧无虑&#xff1b;端来财富&#xff0c;五谷丰登&#xff1b;端来祝福&#xff0c;五彩缤纷。端午节安康&#xff01;

记录一次被谷歌封号后又解封的过程

先提前恭祝2024年所有参加高考的学子们都能金榜题名&#xff0c;会的全对&#xff0c;不会的蒙的全对&#xff01; 一、背景 众所周知&#xff0c;谷歌、ios应用市场对app的审查都是极其严格的&#xff0c;开发者稍有不慎就会被谷歌下架应用&#xff0c;乃至封号。我们公司是做…

Linux:冯·诺依曼体系结构和操作系统

文章目录 冯诺依曼体系结构操作系统概念操作系统的作用定位机制操作系统如何管理硬件 冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系。 截至目前&#xff0c;我们所认识的计算机&…