1. 程式人生 > >WinForm之BindingSource基礎操作實例教程

WinForm之BindingSource基礎操作實例教程

back only 參數 ase this reports mil com 使用

通常我們在進行數據綁定的時候,常用的數據源有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#程序設計的學習有所幫助!

除聲明外,跑步客文章均為原創,轉載請以鏈接形式標明本文地址
WinForm之BindingSource基礎操作實例教程

本文地址: http://www.paobuke.com/develop/c-develop/pbk23599.html






相關內容

技術分享c#讀取XML多級子節點技術分享C#向線程中傳遞多個參數的解決方法(兩種)技術分享C#中前臺線程和後臺線程的區別與聯系技術分享C#畫筆Pen繪制光滑模式曲線的方法
技術分享C# yield在WCF中的錯誤使用(二)技術分享C#插入法排序算法實例分析技術分享C#精確計算年齡的方法分析技術分享C#中委托的+=和-=深入研究

WinForm之BindingSource基礎操作實例教程