以前在进行数据绑定的时候,通常用的数据源有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; }
}
}
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());
}
}
}
下面的示例演示如何在两种不同情况下绑定 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());
}
}
}
《(学习笔记)两天进步一点点》持续更新中… 望大侠们指点一二,谢谢!