C# BindingSource 未完BindingNavigator

news2024/11/13 15:09:46

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

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控件之间的交互,使得数据操作更加直观和方便。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Fedora的远程桌面

要在 Fedora 40 上开启远程桌面功能。 首先&#xff0c;要确保已安装 gnome-remote-desktop 和 vino 包。 这些软件包通常默认安装在 Fedora 的 GNOME 桌面环境中。 可以按照以下步骤操作&#xff1a; 1、判断电脑是否安装了 gnome-remote-desktop 和 vino 包: tomfedora:…

51单片机独立按键控制LED灯,按键按一次亮,再按一次灭

1、功能描述 独立按键控制LED灯&#xff0c;按键按一次亮&#xff0c;再按一次灭 2、实验原理 轻触按键:相当于是一种电子开关&#xff0c;按下时开关接通&#xff0c;松开时开关断开&#xff0c;实现原理是通过轻触按键内部的金属弹片受力弹动米实现接通和断开&#xff1b;…

demo xshell (程序替换 工作目录 内建命令)

1.程序替换 在学习完一些列的进程替换接口之后我们大概就能知道&#xff0c;我们的环境变量以及命令行参数是如何传递给子进程的&#xff0c;这些参数是我们在调用进程替换时就传给了子进程的数据。 那么如果我们自己要实现一个简单的命令行解释器&#xff0c;我们是不是首先…

6.全开源源码---小红书卡片-跳转微信-自动回复跳转卡片-商品卡片-发私信-发群聊-安全导流不封号-企业号白号都可以用

现在用我们的方法&#xff0c;可以规避违规风险&#xff0c;又可以丝滑引流&#xff0c;因为会以笔记的形式发给客户&#xff0c;点击之后直接跳微信&#xff0c;我们来看看演示效果吧&#xff08;没有风险提示&#xff09; 无论是引流还是销售产品都会事半功倍。

tkinter用按钮实现工具栏

tkinter用按钮实现工具栏 效果代码 使用 Python 的 Tkinter 库&#xff0c;我们可以轻松创建一个包含按钮的工具栏。本文将介绍如何在 Tkinter 中创建一个 简单的工具栏&#xff0c;并演示如何添加功能按钮。 效果 代码 import tkinter as tk from tkinter import ttk, filed…

Kafka集成flume

1.flume作为生产者集成Kafka kafka作为flume的sink&#xff0c;扮演消费者角色 1.1 flume配置文件 vim $kafka/jobs/flume-kafka.conf # agent a1.sources r1 a1.sinks k1 a1.channels c1 c2# Describe/configure the source a1.sources.r1.type TAILDIR #记录最后监控文件…

Ubuntu 24.04 LTS 安装配置 MySQL Community Server 8.4.0 LTS

1 安装 Apt Repository ​​​​​​​地址MySQL :: Download MySQL APT Repository sudo dpkg -i mysql-apt-config_0.8.30-1_all.deb #安装mysql 8.4 lts sudo apt update sudo apt-get install mysql-server #修改mysql root密码策略 2 查看版本 testtest:~$ mysqld --v…

【数学】各种图面积公式的推导

Hello&#xff01;大家好&#xff0c;我是学霸小羊&#xff0c;今天讲讲面积公式。 1.长方形 长方形是 由无数条 长度为长方形的长&#xff08;或宽&#xff09;的线 组成的图形&#xff0c;这些线有多少根&#xff0c;我们不知道&#xff0c;只需要知道他们垒成了一个由高 宽…

自然语言处理:第三十四章Lora VS FineTuning

文章链接: [2405.09673] LoRA Learns Less and Forgets Less (arxiv.org) 这是一篇来自哥伦比亚大学和databricks对Lora 和FineTuning 更深一步的研究。有关于Lora可以参考我之前的文章: 自然语言处理: 第十二章LoRA解读_lora自然英语处理-CSDN博客 有关于fine_tuning 可以参考…

Stream流的实际使用

一、中间操作 1、fileter的使用 filter起到过滤筛选的作用&#xff0c;一般在filter中衔接lambda表达式起到筛选作用 2、Map方法的使用 Map方法的适用场景&#xff0c;接上例&#xff0c;对当前的包含对象的流数据转换为仅包含人名的流&#xff0c;那么就适合使用map方法来进行…

Java核心: JarIndex的使用

在讲解Java类加载器的时候&#xff0c;我们发现URLClassLoader加载类或资源时通过访问ClassPath下的每一个路径&#xff0c;来确定类是否存在的&#xff0c;假设我们执行的命令是这样的 java -classpath D:\DiveInSpring\target\classes;C:\lib\spring-expression.jar;C:\lib\…

【Leetcode】881. 救生艇

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 点击打开题目链接&#x1f517; 给定数组 p e o p l e people people 。 p e o p l e [ i ] people[i] people[i]表示第 i i i 个人的体重 &#xff0c;船的数量不限&#xff0c;每艘船可以承载的最大重…

JavaScript学习|JavaScript 引入方式、JavaScript 基础语法、JavaScript 对象、BOM、DOM、事件监听、事件绑定

JavaScript 能做什么 1.能够改变文本内容 2.能够改变图像的src属性值 3.能够进行表单验证等 JavaScript 引入方式 内部脚本 1.内部脚本:将 JS代码定义在HTML页面中&#xff0c;JavaScript代码必须位于<script>与</script>标签之间。在 HTML 文档中可以在任意地…

Linux iptables详解

前言&#xff1a;事情是这样的。最近部门在进行故障演练&#xff0c;攻方同学利用iptables制造了一个故障。演练最终肯定是取得了理想的效果&#xff0c;即业务同学在规定时间内定位了问题并恢复了业务(ps&#xff1a;你懂得)。 对我个人来讲一直知道iptables的存储&#xff0…

树莓派4B_OpenCv学习笔记5:读取窗口鼠标状态坐标_TrackBar滑动条控件的使用

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1&#xff1a; 今日学习:读取窗口鼠标状态坐标_TrackBar滑动条控件的使…

【MySQL】(基础篇五) —— 排序检索数据

排序检索数据 本章将讲授如何使用SELECT语句的ORDER BY子句&#xff0c;根据需要排序检索出的数据。 排序数据 还是使用上一节中的例子,查询employees表中的last_name字段 SELECT last_name FROM employees;输出结果&#xff1a; 发现其输出并没有特定的顺序。其实&#xf…

速卖通店铺防关联该怎么做?

大家都知道&#xff0c;想要进行多账号操作必须一再小心&#xff0c;否则会有很大的关联风险&#xff0c;而账号关联所带来的后果是卖家绝对不能轻视的&#xff0c;严重的话会导致封号&#xff0c;这样一来自己前期的辛苦运营就全都打水漂了&#xff0c;因此防关联很重要&#…

卷积神经网络 convolution neural network

1.数学卷积&#xff1a;滑动窗口 2.图像具有局部相关性和平移不变性&#xff0c;有许多冗余的特征点&#xff0c;如果用全连接的神经网络会很浪费时间。 3.卷积nn&#xff1a;减少参数&#xff0c;滑动提取特征&#xff0c;特征作为下层卷积的输入&#xff0c;然后放到全连接…

PythonX.X、pipX的关系

PythonX.X、pipX的关系 Python2.x 与 3.x Python 的 3.0 版本&#xff0c;相对于 Python 的早期版本&#xff0c;是一个大的升级。许多针对早期 Python2.x 版本设计的程序都无法在 Python 3.x 上正常执行。为了照顾大量的历史遗留项目&#xff0c;Python 2.6 作为一个过渡版本…