WinForm之BindingSource基础操作实例教程

 更新时间:2014年08月26日 12:11:34   投稿:shichen2014  
这篇文章主要介绍了WinForm之BindingSource基础操作,对BindingSource组建的用法进行较为深入的实例分析,需要的朋友可以参考下

通常我们在进行数据绑定的时候,常用的数据源有DataSet、DataTable、BindingList<T>、还有强类型数据源。今天我们来通过实例了解一下BindingSource组建,分享给大家供大家参考借鉴之用。

BindingSource的两个用途:

(1)首先,它提供一个将窗体上的控件绑定到数据的间接层。这是通过将 BindingSource 组件绑定到数据源,然后将窗体上的控件绑定到 BindingSource 组件来完成的。与数据的所有进一步交互(包括导航、排序、筛选和更新)都是通过调用 BindingSource 组件来完成的。
(2)其次,BindingSource 组件可以充当强类型数据源。使用 Add 方法向 BindingSource 组件添加类型会创建一个该类型的列表。

一、对BindingSource的基础操作——增删改查

实例代码如下:

  public partial class Form1 : Form
  {
    //注当前DGV已经绑定到 ID 和 Name 列
    private BindingSource source = new BindingSource();
    public Form1()
    {
      InitializeComponent();
    }
    //窗体加载
    private void Form1_Load(object sender, EventArgs e)
    {
      this.source.DataSource = typeof(Custom);
      this.dataGridView1.DataSource = this.source;
    }
    //添加
    private void button1_Click(object sender, EventArgs e)
    {
      this.source.Add(new Custom(1,"A"));
      this.source.Add(new Custom(2,"B"));
    }
    //删除
    private void button2_Click(object sender, EventArgs e)
    {
      this.source.RemoveAt(0);
    }
    //排序 【有问题】
    private void button3_Click(object sender, EventArgs e)
    {
      this.source.Sort = "ID ASC";
      this.source.ResetBindings(false);
    }
    //筛选 【有问题】
    private void button4_Click(object sender, EventArgs e)
    {
      this.source.Filter = "ID = 1";
      this.source.ResetBindings(false);
    }
    //向下移动
    private void button5_Click(object sender, EventArgs e)
    {
      this.source.MoveNext();
      MessageBox.Show(this.source.Position.ToString());
    }
    //向上移动
    private void button9_Click(object sender, EventArgs e)
    {
      this.source.MovePrevious();
      MessageBox.Show(this.source.Position.ToString());
    }
    //获取当前项
    private void button6_Click(object sender, EventArgs e)
    {
      Custom custom = (Custom)this.source.Current;
      MessageBox.Show(" 所处的位置 : " + this.source.IndexOf(custom).ToString());
      MessageBox.Show("custom.Name : " + custom.Name);
    }
    //修改当前项
    private void button7_Click(object sender, EventArgs e)
    {
      Custom custom = (Custom)this.source.Current;
      custom.Name = "修改后的值";
      this.source.ResetCurrentItem();
    }
    //删除当前项
    private void button8_Click(object sender, EventArgs e)
    {
      Custom custom = (Custom)this.source.Current;
      this.source.Remove(custom);
    }
  }
  //自定义类 字段必须属性公开化
  public class Custom
  {
    public Custom()
    { }
    public Custom(int ID, string Name)
    {
      this.ID = ID;
      this.Name = Name;
    }
    private int id;
    public int ID
    {
      get { return id; }
      set { id = value; }
    }
    private string name;
    public string Name
    {
      get { return name; }
      set { name = value; }
    }
  }

二、  下面的示例演示如何在两种不同情况下绑定 DBNull 值。

第一种情况演示如何设置字符串属性的 NullValue;第二种情况演示如何设置图像属性的 NullValue。

下面的示例演示如何在两种不同情况下绑定 DBNull 值。第一种情况演示如何设置字符串属性的 NullValue;第二种情况演示如何设置图像属性的 NullValue。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Data.SqlClient;
using System.Windows.Forms;
namespace DBNullCS
{
  public class Form1 : Form
  {
    public Form1()
    {    
      this.Load += new EventHandler(Form1_Load);
    }
    // The controls and components we need for the form.
    private Button button1;
    private PictureBox pictureBox1;
    private BindingSource bindingSource1;
    private TextBox textBox1;
    private TextBox textBox2;
    // Data table to hold the database data.
    DataTable employeeTable = new DataTable();
    void Form1_Load(object sender, EventArgs e)
    {
      // Basic form setup.
      this.pictureBox1 = new PictureBox();
      this.bindingSource1 = new BindingSource();
      this.textBox1 = new TextBox();
      this.textBox2 = new TextBox();
      this.button1 = new Button();
      this.pictureBox1.Location = new System.Drawing.Point(20, 20);
      this.pictureBox1.Size = new System.Drawing.Size(174, 179);
      this.textBox1.Location = new System.Drawing.Point(25, 215);
      this.textBox1.ReadOnly = true;
      this.textBox2.Location = new System.Drawing.Point(25, 241);
      this.textBox2.ReadOnly = true;
      this.button1.Location = new System.Drawing.Point(200, 103);
      this.button1.Text = "Move Next";
      this.button1.Click += new System.EventHandler(this.button1_Click);
      this.ClientSize = new System.Drawing.Size(292, 273);
      this.Controls.Add(this.button1);
      this.Controls.Add(this.textBox2);
      this.Controls.Add(this.textBox1);
      this.Controls.Add(this.pictureBox1);
      this.ResumeLayout(false);
      this.PerformLayout();
      // Create the connection string and populate the data table
      // with data.
      string connectionString = "Integrated Security=SSPI;" +
        "Persist Security Info = False;Initial Catalog=Northwind;" +
        "Data Source = localhost";
      SqlConnection connection = new SqlConnection();
      connection.ConnectionString = connectionString;
      SqlDataAdapter employeeAdapter = 
        new SqlDataAdapter(new SqlCommand("Select * from Employees", connection));
      connection.Open();
      employeeAdapter.Fill(employeeTable);
      // Set the DataSource property of the BindingSource to the employee table.
      bindingSource1.DataSource = employeeTable;
      // Set up the binding to the ReportsTo column.
      Binding reportsToBinding = textBox2.DataBindings.Add("Text", bindingSource1, 
        "ReportsTo", true);
      // Set the NullValue property for this binding.
      reportsToBinding.NullValue = "No Manager";
      // Set up the binding for the PictureBox using the Add method, setting
      // the null value in method call.
      pictureBox1.DataBindings.Add("Image", bindingSource1, "Photo", true, 
        DataSourceUpdateMode.Never, new Bitmap(typeof(Button), "Button.bmp"));
      // Set up the remaining binding.
      textBox1.DataBindings.Add("Text", bindingSource1, "LastName", true);
    }
    // Move through the data when the button is clicked.
    private void button1_Click(object sender, EventArgs e)
    {
      bindingSource1.MoveNext();
    }
    [STAThread]
    static void Main()
    {
      Application.EnableVisualStyles();
      Application.Run(new Form1());
    }
  }
}

希望本文实例对大家C#程序设计的学习有所帮助!

相关文章

  • C# 动态输出Dos命令执行结果的实例(附源码)

    C# 动态输出Dos命令执行结果的实例(附源码)

    这篇文章主要介绍了C# 动态输出Dos命令执行结果的实例,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • Unity中的InitializeOnLoad特性实践深入解析

    Unity中的InitializeOnLoad特性实践深入解析

    这篇文章主要为大家介绍了Unity中的InitializeOnLoad特性实践深入解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • C#中通过LRU实现通用高效的超时连接探测

    C#中通过LRU实现通用高效的超时连接探测

    这篇文章主要介绍了c#中通过LRU实现通用高效的超时连接探测,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2018-11-11
  • C#实现把彩色图片灰度化代码分享

    C#实现把彩色图片灰度化代码分享

    这篇文章主要介绍了C#实现把彩色图片灰度化代码分享,用在一些特殊场合中,需要的朋友可以参考下
    2014-08-08
  • C#8.0中的模式匹配

    C#8.0中的模式匹配

    这篇文章介绍了C#8.0中的模式匹配,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • C#实现逐行读取和写入文件的方法

    C#实现逐行读取和写入文件的方法

    这篇文章给大家介绍了使用C#语言实现同样的功能,即从输入文件中读取每行数据,然后将每行字段组合成SQL插入脚本,然后逐行写入另外一个空白文件中,感兴趣的朋友可以参考下
    2024-01-01
  • 详解c# 线程同步

    详解c# 线程同步

    这篇文章主要介绍了c# 线程同步的相关资料,文中讲解非常细致,示例代码帮助大家更好的理解和学习c# 多线程,感兴趣的朋友可以了解下
    2020-07-07
  • 基于C#实现的HOOK键盘钩子实例代码

    基于C#实现的HOOK键盘钩子实例代码

    这篇文章主要介绍了基于C#实现的HOOK键盘钩子实例,需要的朋友可以参考下
    2014-07-07
  • C# Chart 简单使用教程

    C# Chart 简单使用教程

    Chart控件可以用来绘制波形图、柱状图、饼图、折线图等,用来进行数据表现是很不错的,现在简单说一下这个控件的使用方法,对C# Chart使用相关知识感兴趣的朋友一起看看吧
    2022-11-11
  • 在GridControl控件上绑定图片的几种操作方式详解

    在GridControl控件上绑定图片的几种操作方式详解

    GridControl控件是经常用来绑定数据的,一般以常规的字符内容为主,有时候也会有图片的显示需要,这篇文章主要介绍了在GridControl控件上绑定图片的几种操作方式详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07

最新评论