通常我们在进行数据绑定的时候,常用的数据源有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基础操作实例教程】相关文章:
★ 深入分析C#中WinForm控件之Dock顺序调整的详解