《(学习笔记)两天进步一点点》(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());
}

}
}


 

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

 

posted @ 2010-08-12 01:21  把爱延续  阅读(2893)  评论(0编辑  收藏  举报