一,快速生成数据绑定
具体步骤如下;
(1)在VS中新建一个窗体应用程序项目
(2)在项目菜单选择“项目”—>“添加新数据源命令”,打开数据配置向导,
(3)选择数据源为“数据库”,单击下一步
(4)点击“新建连接”,首次链接会出现选择数据源窗口,选择“Microsoft SQL 2008 Server”,以后链接就默认使用SQL server
(5)输入服务器名和你需要绑定的数据库名。点击确定
(6)选择数据库对象,选择需要访问的数据库表,单机完成按钮;
(7)安装完配置后悔增加一个类型化数据集,如下图,可以打开看自动生成的C#源程序
(8)执行数据菜单可看到数据源窗口
(9)此时你可以对数据表进行预览,或者直接拖动数据表到form窗口,
二、类型化数据集和TableAdapter
绑定数据源后悔自动生成一个类型化数据集,本文中数据库的名字是db_Mytime,类型化后数据集的名字变为db_MytimeDataSet;
每个加入的数据源得到数据表对应生成一个DataTable类(【表名】DataTable)一个DataRow类(【表名】Row),一个DataAdapter类(【表名】TableAtapter)
使用类型化和非类型化修改教师数据表时对比:
DataRow row;
DataTable teachertable;
teachertable = ds.Table["Teacher"];
row = teachertable.Rows[0];
row["TeacherName"] = "赵飞";
//使用类型化的数据集
db_MytimeDataSet.TecherRow teacher;
db_MytimeDataSet.TecherDataTable Table;
Table = db_MytimeDataSet.Techer;
teacher = Table[0];
teacher.TecherName = "赵飞";
TableAdapter类
TableAdapter用来操作强类型DataTable中数据,每个DataTable会对应一个TableAdapter类负责该DataTabel中的数据检索和数据保存,
常用的方法包括:
Fill()方法和GetDdata()方法用于获取数据
Insert()方法,用于增加数据行
Delete()方法,用于删除数据行
若干个Update方法
下面是针对类型化的数据集操作的简单程序
为在程序中书写简化通常在程序文件中阿加入using语句
using TeacherRow = Save_TimeSpan.db_MytimeDataSet.TecherRow;
using TeacherDataTable = Save_TimeSpan.db_MytimeDataSet.TecherDataTable;
using Save_TimeSpan.db_MytimeDataSetTableAdapters;
//声明并实例化一个Datatable对象和一个TableAdapter对象
TecherTableAdapter techerTableadapter = new TecherTableAdapter();
TeacherDataTable teacherTable = new TeacherDataTable();
winform界面如如下
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using TeacherRow = Save_TimeSpan.db_MytimeDataSet.TecherRow;
using TeacherDataTable = Save_TimeSpan.db_MytimeDataSet.TecherDataTable;
using Save_TimeSpan.db_MytimeDataSetTableAdapters;
namespace Save_TimeSpan
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
//声明并实例化一个Datatable对象和一个TableAdapter对象
TecherTableAdapter techerTableadapter = new TecherTableAdapter();
TeacherDataTable teacherTable = new TeacherDataTable();
private void bindingNavigatorMoveLastItem_Click(object sender, EventArgs e)
{
}
private void techerBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
this.Validate();
this.techerBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.db_MytimeDataSet);
}
private void Form3_Load(object sender, EventArgs e)
{
// TODO: 这行代码将数据加载到表“db_MytimeDataSet.db_time”中。您可以根据需要移动或删除它。
// TODO: 这行代码将数据加载到表“db_MytimeDataSet.Techer”中。您可以根据需要移动或删除它。
this.techerTableAdapter.Fill(this.db_MytimeDataSet.Techer);
dataGridView1.DataSource = db_MytimeDataSet.Techer;
}
private void button1_Click(object sender, EventArgs e)
{
teacherTable = techerTableadapter.GetTeacherByID(textID.Text);
if (teacherTable.Count > 0)
{
MessageBox.Show("数据库中已有该该ID信息", "警告");
}
else
{
TeacherRow teacherRow = teacherTable.NewTecherRow();
teacherRow.TeacherID = textID.Text;
teacherRow.TecherName = textName.Text;
teacherRow.Sex = textsex.Text;
teacherRow.Major = textMajor.Text;
teacherRow.DepartmentID = Convert.ToByte(textParID.Text.ToString());
teacherTable.AddTecherRow(teacherRow);
techerTableAdapter.Update(teacherTable);
//dataGridView1.Rows.Add();
//DataGridViewRow row = dataGridView1.Rows[dataGridView1.Rows.Count - 1];
//row.Cells[0].Value = teacherRow.TeacherID.ToString();
//row.Cells[1].Value = teacherRow.DepartmentID.ToString();
//row.Cells[2].Value = teacherRow.TecherName.ToString();
//row.Cells[3].Value = teacherRow.Sex.ToString();
//dataGridView1.Rows.Add(row);
this.techerTableAdapter.Fill(this.db_MytimeDataSet.Techer);
dataGridView1.DataSource = db_MytimeDataSet.Techer;
}
}
private void textSex_TextChanged(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
int index = dataGridView1.CurrentRow.Index;
teacherTable = techerTableAdapter.GetData();
TeacherRow teacherRow = teacherTable[index];
teacherRow.TeacherID = textID.Text;
teacherRow.Major = textMajor.Text;
teacherRow.TecherName = textName.Text;
teacherRow.Sex = textsex.Text;
teacherRow.Major = textMajor.Text;
teacherRow.DepartmentID = Convert.ToByte(textParID.Text.ToString());
techerTableAdapter.Update(teacherRow);
dataGridView1.CurrentRow.Cells["TeacherID"].Value= textID.Text;
dataGridView1.CurrentRow.Cells["TecherName"].Value = textName.Text;
dataGridView1.CurrentRow.Cells["Sex"].Value = textsex.Text;
dataGridView1.CurrentRow.Cells["DepartmentID"].Value = Convert.ToByte(textParID.Text.ToString());
dataGridView1.CurrentRow.Cells["Major"].Value = textMajor.Text;
}
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
try
{
if (dataGridView1.CurrentRow.Cells[0] != null)
{
DataGridViewRow dgvr = dataGridView1.CurrentRow;
textID.Text = dgvr.Cells[0].Value.ToString();
textParID.Text = dgvr.Cells[1].Value.ToString();
textName.Text = dgvr.Cells[2].Value.ToString();
textMajor.Text = dgvr.Cells[5].Value.ToString();
textsex.Text = dgvr.Cells[3].Value.ToString();
}
else
{
textID.Text = "";
textParID.Text = "";
textName.Text = "";
textMajor.Text = "";
textsex.Text = "";
}
}
catch
{ }
}
private void button3_Click(object sender, EventArgs e)
{
try
{
teacherTable = techerTableAdapter.GetData();
TeacherRow techRow = teacherTable[dataGridView1.CurrentRow.Index];
techRow.Delete();
techerTableAdapter.Update(techRow);
dataGridView1.Rows.RemoveAt(dataGridView1.CurrentRow.Index);
}
catch
{
}
}
}
}
三、添加查询方法
双击…DataSet.xsd文件。打开设计器,然后选择要添加数据访问方法的TableAdapter,右击。选“添加查询”
可以多种方法,执行相应的SQL语句
编辑SQL语句,本文SQL语句为“SELECT TeacherID, DepartmentID, TecherName, Sex, Birthday, Major FROM dbo.Techer where ID=@TeacherID”
为形成的函数命名。一种以Fill开头,一种以Get开头,以fill开头的方法是吧,查询到的数据填充到一个DataTable对象中区,此对象必须已经实例化,以Get开头的方法直接返回一个DataTable,儿不需事先实例化,可以根据需要生成一种方法或者两种方法,本文选择Get方法命名为GetTeacherByID()
在程序应用来判断是都存在教师ID的信息
teacherTable = techerTableadapter.GetTeacherByID(textID.Text);
if (teacherTable.Count > 0)
{
MessageBox.Show("数据库中已有该该ID信息", "警告");
}
else
注意
在load事件中通常自动生成一程序
// TODO: 这行代码将数据加载到表“db_MytimeDataSet.Techer”中。您可以根据需要移动或删除它。
this.techerTableAdapter.Fill(this.db_MytimeDataSet.Techer);
这段代码的作用是使用TableAdapter从数据库中检索全部数据,填充到类型化数据集db_MytimeDataSet对象的Techer这个DAtaTable对象中,
this.techerTableAdapter.Fill(this.db_MytimeDataSet.Techer);
dataGridView1.DataSource = db_MytimeDataSet.Techer;
当然也可以采用如下几种方法;
// TODO: 这行代码将数据加载到表“db_MytimeDataSet.db_time”中。您可以根据需要移动或删除它。
//方法1
// TODO: 这行代码将数据加载到表“db_MytimeDataSet.Techer”中。您可以根据需要移动或删除它。
//this.techerTableAdapter.Fill(this.db_MytimeDataSet.Techer);
//dataGridView1.DataSource = db_MytimeDataSet.Techer;
//方法2通过函数获得数据表
dataGridView1.DataSource = techerTableadapter.GetData();
//方法3,将dataSource属性值设置为数据集对象,使用DataMeber属性设置要绑定的数据集中表的名称;
//this.techerTableAdapter.Fill(this.db_MytimeDataSet.Techer);
//dataGridView1.DataSource = db_MytimeDataSet;
//dataGridView1.DataMember = "Techer";
以上语句就可以将Techer表在DatagridView中显示;