C# BindingSource 未完BindingNavigator

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

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/697152.html

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

相关文章

集成学习模型对比优化—银行业务

1.Data Understanding 2.Data Exploration 3.Data Preparation 4.Training Models 5.Optimization Model 集成学习模型对比优化—银行业务 1.Data Understanding import pandas as pd from matplotlib import pyplot as plt import seaborn as sns df pd.read_csv(&quo…

《TCP/IP网络编程》(第十四章)多播与广播

当需要向多个用户发送多媒体信息时&#xff0c;如果使用TCP套接字&#xff0c;则需要维护与用户数量相等的套接字&#xff1b;如果使用之前学习的UDP&#xff0c;传输次数也需要和用户数量相同。 所以为了解决这些问题&#xff0c;可以采用多播和广播技术&#xff0c;这样只需要…

pxe自动装机:

pxe自动装机&#xff1a; 服务端和客户端 pxe c/s模式&#xff0c;允许客户端通过网络从远程服务器&#xff08;服务端&#xff09;下载引导镜像&#xff0c;加载安装文件&#xff0c;实现自动化安装操作系统。 无人值守 无人值守&#xff0c;就是安装选项不需要人为干预&am…

当前 Python 版本中所有保留字keyword.kwlist

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 当前 Python 版本中 所有保留字 keyword.kwlist [太阳]选择题 根据给定的Python代码&#xff0c;哪个选项是正确的&#xff1f; import keyword print("【执行】keyword.kwlist"…

vue面试题2-根据以下问题回答

以下是针对提供的关于Vue的问题的回答&#xff1a; Vue的基本原理&#xff1a; Vue.js是一个流行的JavaScript框架&#xff0c;用于构建用户界面和单页面应用。其基本原理包括响应式数据、模板、组件系统、指令、生命周期钩子和虚拟DOM。 双向数据绑定的原理&#xff1a; Vue通…

自动化测试-Selenium(一),简介

自动化测试-Selenium 1. 什么是自动化测试 1.1 自动化测试介绍 自动化测试是一种通过自动化工具执行测试用例来验证软件功能和性能的过程。与手动测试不同&#xff0c;自动化测试使用脚本和软件来自动执行测试步骤&#xff0c;记录结果&#xff0c;并比较预期输出和实际输出…

第十一篇——信息增量:信息压缩中的保守主义原则

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 通过信息中的保守主义&#xff0c;我想到了现实中人的保守主义一样&#…

【InternLM实战营第二期笔记】07:OpenCompass :是骡子是马,拉出来溜溜

文章目录 课程实操 课程 评测的意义是什么呢&#xff1f;我最近也在想。看到这节开头的内容后忽然有个顿悟&#xff1a;如果大模型最终也会变成一种基础工具&#xff08;类比软件&#xff09;&#xff0c;稳定或可预期的效果需要先于用户感知构建出来&#xff0c;评测 case 就…

项目方案:社会视频资源整合接入汇聚系统解决方案(五)

目录 一、概述 1.1 应用背景 1.2 总体目标 1.3 设计原则 1.4 设计依据 1.5 术语解释 二、需求分析 2.1 政策分析 2.2 业务分析 2.3 系统需求 三、系统总体设计 3.1设计思路 3.2总体架构 3.3联网技术要求 四、视频整合及汇聚接入 4.1设计概述 4.2社会视频资源分…

javascript动态绑定

介绍 先来看看ai的解释 动态绑定机制是面向对象编程中的一个核心概念&#xff0c;特别是在Java这样的语言中。它允许在运行时根据对象的实际类型来决定调用哪个方法&#xff0c;而不是在编译时。这是多态性的关键特性之一。 在Java中&#xff0c;动态绑定是通过方法调用和方法…

安卓事件交互(按键事件、触摸事件、手势识别、手势冲突处理)

本章介绍App开发常见的以下事件交互技术&#xff0c;主要包括&#xff1a;如何检测并接管按键事件&#xff0c;如何对触摸事件进行分发、拦截与处理&#xff0c;如何根据触摸行为辨别几种手势动作&#xff0c;如何正确避免手势冲突的意外状况。 按键事件 本节介绍App开发对按…

人脸考勤项目实训

第一章 Python-----Anaconda安装 文章目录 第一章 Python-----Anaconda安装前言一、Anaconda是什么&#xff1f;二、Anaconda的前世今生二、Windows安装步骤1.官网下载2.安装步骤安装虚拟环境 总结 前言 工欲善其事必先利其器&#xff0c;项目第一步&#xff0c;安装我们的环境…

Mysql的底层实现逻辑

Mysql5.x和Mysql8性能的差异 整体性能有所提高&#xff0c; 在非高并发场景下&#xff0c;他们2这使用区别不大&#xff0c;性能没有明显的区别。 只有高并发时&#xff0c;mysql8才体现他的优势。 2. Mysql数据存储结构Innodb逻辑结构 数据选用B树结构存储数据&#xff0…

基于STM32的595级联的Proteus仿真

文章目录 一、595级联1.题目要求2.思路3.仿真图3.1 未仿真时3.2 模式A3.2 模式B3.3 故障模式 二、总结 一、595级联 1.题目要求 STM32单片机&#xff0c;以及三个LED灯对应红黄绿灯&#xff0c;IIC的OLED显示屏&#xff0c;温湿度传感器DHT11&#xff0c;两个独立按键和两个5…

深度学习的实用性探究:虚幻还是现实?

深度学习的实用性探究&#xff1a;虚幻还是现实&#xff1f; 深度学习作为人工智能领域的一个热点&#xff0c;已经在学术和工业界引起了广泛的关注。尽管深度学习技术显示出惊人的性能和潜力&#xff0c;但有时它们给人的感觉是“虚”的&#xff0c;或许是因为它们的抽象性和…

react修改本地运行项目的端口

一、描述 如果你想让项目在你想要的端口打开的话&#xff0c;就需要进行设置 二、代码 设置一下pages.json文件就可以了&#xff0c;如下&#xff1a; 如果想打开项目不需要点击下面的链接地址&#xff0c;让他运行npm run dev之后自己直接打开到浏览器的话&#xff0c;在后…

猫头虎分享已解决Bug || Uncaught TypeError: Cannot set property ‘innerHTML‘ of null**

猫头虎分享已解决Bug || Uncaught TypeError: Cannot set property ‘innerHTML’ of null** 原创作者&#xff1a; 猫头虎 作者微信号&#xff1a; Libin9iOak 作者公众号&#xff1a; 猫头虎技术团队 更新日期&#xff1a; 2024年6月6日 博主猫头虎的技术世界 &#x…

盘点2024年5月Sui生态发展,了解Sui近期成长历程!

2024年5月是Sui的第一个生日月&#xff0c;Sui迎来了它的上线一周年纪念日。在过去的一年中Sui在技术进步与创新、生态系统的扩展、社区发展与合作伙伴关系以及重大项目和应用推出方面取得重要进展&#xff0c;展示了其作为下一代区块链平台的潜力。 以下是Sui的近期成长历程集…

一、Electron 环境初步搭建

新建一个文件夹&#xff0c;然后进行 npm init -y 进行初始化&#xff0c;然后我们在进行 npm i electron --save-dev , 此时我们按照官网的教程进行一个初步的搭建&#xff0c; 1.在 package.json 文件进行修改 {"name": "electron-ui","version…

pyqt QlineEdit内部增加按钮方法

按钮放在QlineEdit内部&#xff0c;界面更紧凑&#xff0c;体现了按钮和文本框的强关联。 def addButton(self,lineEdit):btn QtWidgets.QPushButton("")icon1 QtGui.QIcon()icon1.addPixmap(QtGui.QPixmap(":/image/images/th.png"), QtGui.QIcon.Norm…