zoukankan      html  css  js  c++  java
  • 《(学习笔记)两天进步一点点》(2) ——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 值
    //***********************************************************************
    下面的示例演示如何在两种不同情况下绑定 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());
    }

    }
    }


     

    《(学习笔记)两天进步一点点》持续更新中…  望大侠们指点一二,谢谢!

     



    返回导读目录,阅读更多随笔



    分割线,以下为博客签名:

    软件臭虫情未了
    • 编码一分钟
    • 测试十年功


    随笔如有错误或不恰当之处、为希望不误导他人,望大侠们给予批评指正。

  • 相关阅读:
    isNUll ,对于sql中的一个表的description的NULL和空格的处理
    Thread类学习
    java学习计划
    HTTP请求过程(http是一种无状态协议,即不建立持久的连接)
    JS事件流(W3C与IE区别)
    学习Javascript闭包
    div内长串数字或字母不断行处理
    仿购物车加减数字
    多行文字两行断尾点点点显示
    MegaCli命令详解
  • 原文地址:https://www.cnblogs.com/08shiyan/p/1797748.html
Copyright © 2011-2022 走看看