DataGridView中数据存入数据库方法
来源:互联网 发布:mac版芒果tv怎么缓存 编辑:程序博客网 时间:2024/06/08 03:01
最近在做毕业设计,同时也在学习C#用到DataGridView时开始觉得很难,经过朋友的帮助和自己的努力,稍微的明白了一些,现在就把我写的方法写下来,大家一起学习,写的不好的地方也请指证。
DataGridView做了新的数据显示控件加入到了.Net 05中,其强大的编辑能力让其成为了数据显示中必不可少的控件。目前对于DataGridView中的更新讲的挺多的,但直接的插入数据好像讲的不是太多,下面就以我的例子说明一下。
1、首先新建一个项目。
2、建立一个数据库连接类LinkDataBase。因为数据库操作有很多都是重复性工作,所以我们写一个类来简化对数据库的操作。
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Data.Sql;
namespace Test
...{
class LinkDataBase
...{
//设置连接字符串
private string strSQL;
//与数据库连接
private string connectionString = "Data Source=Localhost;Initial Catalog=Test;Integrated Security=True";
private SqlConnection myConnection;
private SqlCommandBuilder sqlCmdBld;
private DataSet ds = new DataSet();
private SqlDataAdapter da;
public LinkDataBase()
...{
}
//根据输入的SQL语句检索数据库数据
public DataSet SelectDataBase(string tempStrSQL, string tempTableName)
...{
this.strSQL = tempStrSQL;
this.myConnection = new SqlConnection(connectionString);
this.da = new SqlDataAdapter(this.strSQL, this.myConnection);
this.ds.Clear();
this.da.Fill(ds, tempStrSQL);
//返回填充了数据的DataSet,其中数据表以tempTableName给出的字符串命名
return ds;
}
//数据库数据更新(传DataSet和DataTable的对象)
public DataSet UpdateDataBase(DataSet changedDataSet, string tableName)
...{
this.myConnection = new SqlConnection(connectionString);
this.da = new SqlDataAdapter(this.strSQL, this.myConnection);
this.sqlCmdBld = new SqlCommandBuilder(da);
this.da.Update(changedDataSet, tableName);
//返回更新过的数据库表
return changedDataSet;
}
//检索数据库数据(传字符串,直接操作数据库)
public DataTable SelectDataBase(string tempStrSQL)
...{
this.myConnection = new SqlConnection(connectionString);
DataSet tempDataSet = new DataSet();
this.da = new SqlDataAdapter(tempStrSQL, this.myConnection);
this.da.Fill(tempDataSet);
return tempDataSet.Tables[0];
}
//数据库数据更新(传字符串,直接操作数据库)
public int UpdateDataBase(string tempStrSQL)
...{
this.myConnection = new SqlConnection(connectionString);
myConnection.Open();
SqlCommand tempSqlcommand = new SqlCommand(tempStrSQL, this.myConnection);
int intNumber = tempSqlcommand.ExecuteNonQuery();
myConnection.Close();
return intNumber;
}
}
}
上面这段代码很容易理解。大大的简化了我们的操作。
2、建立一个DataGridView控件,将其命名。(我这里把他命名成:dgv_type)。再加入一个Combobox控件来实现定位到某格时出现下拉列表框。其实DataGridView具有DataGridViewCombobxColumn属性,但这样做出来的下拉框不如绑定一个Combobox控件美。
3、下面进行代码绑定
将数据表Sex中的Sex字段传给Combobox做为Item使用。
...{
string tempStrSQL = "select Sex from Sex";
tempDataTable = link.SelectDataBase(tempStrSQL);
for (int i = 0; i < tempDataTable.Rows.Count; i++)
...{
//将Sex中性别字段传给Combobox
this.cmb_sex.Items.Add(tempDataTable.Rows[i][0]);
}
}
4、建立DataGridView的CurrentCellChanged事件,产生当焦点进入某单元格内出现Combobox的效果
...{
if (this.dgv_type.CurrentCell.ColumnIndex == 2)
...{
Rectangle rect = dgv_type.GetCellDisplayRectangle(dgv_type.CurrentCell.ColumnIndex, dgv_type.CurrentCell.RowIndex, false);
cmb_sex.Left = rect.Left;
cmb_sex.Top = rect.Top;
cmb_sex.Width = rect.Width;
cmb_sex.Height = rect.Width;
cmb_sex.Visible = true;
}
else
...{
cmb_sex.Visible = false;
}
}
5、建立Combobox的SelectedIndexChanged事件,当改变时,将值传送给DataGridView相应的单元格内。
记得啊,比较字符时一定要加上.Trim()去掉空格,当数据库中字段类型为nchar时后面会产生空格造成比较结果不同。例如“男”和“男 ”可是不一样的啊>.<。所以为了良好的习惯最好还是加上.Trim()。
...{
if (((ComboBox)sender).Text.Trim() == "男")
...{
if (dgv_type.CurrentCell != null)
...{
dgv_type.CurrentCell.Value = "男";
dgv_type.CurrentCell.Tag = "1";
}
}
if (((ComboBox)sender).Text.Trim() == "女")
...{
if (dgv_type.CurrentCell != null)
...{
dgv_type.CurrentCell.Value = "女";
dgv_type.CurrentCell.Tag = "2";
}
}
}
6、建立DataGridView的DataBindingComplete事件,用来显示单元格内的值
...{
for (int i = 0; i < this.dgv_type.Rows.Count; i++)
...{
if (dgv_type.Rows[i].Cells[1].Value != null && dgv_type.Rows[i].Cells[1].ColumnIndex == 1)
...{
dgv_type.Rows[i].Cells[1].Tag = dgv_type.Rows[i].Cells[1].Value.ToString();
if (dgv_type.Rows[i].Cells[1].Value.ToString() == "1")
...{
dgv_type.Rows[i].Cells[1].Value = "男";
}
else if (dgv_type.Rows[i].Cells[1].Value.ToString() == "2")
...{
dgv_type.Rows[i].Cells[1].Value = "女";
}
}
}
}
7、最后把所有的事件放到Load中
...{
BindType();
cmb_sex.SelectedIndexChanged += new EventHandler(cmb_sex_SelectedIndexChanged);
this.dgv_type.Controls.Add(cmb_sex);
}
现在可以在表中输入数据了。输入数据后呢,当然我们要把他们保存到数据库内。
8、建立一个Button控件来实现数据的保存。其中使用了一个rowMax来记录DataGridView中输入数据的最大行号。因为在保存后有时还要继续向表内输入数据,这样做可以记录下先前保存时的最大行号,避免重复输入数据的错误。(好像Adapter.updata()可以更新,但我不会。。。。。。这里也希望请教一下)
...{
string tempStrSQL;
//rowMax为当前DataGridView中最大行号
for (int i = rowMax; rowMax < this.dgv_type.Rows.Count; rowMax++)
...{
if (this.dgv_type.Rows[rowMax].Cells[0].Value == null)
...{
break;
}
else
...{
string ID = dgv_type.Rows[rowMax].Cells[0].Value.ToString().Trim();
string Name = dgv_type.Rows[rowMax].Cells[1].Value.ToString().Trim();
string Sex = dgv_type.Rows[rowMax].Cells[2].Value.ToString().Trim();
string sendValues = "('" + ID + "','" + Name + "','" + Sex + "')";
tempStrSQL = "insert Name (ID,Name,Sex) values " + sendValues;
link.UpdateDataBase(tempStrSQL);
}
}
MessageBox.Show("保存成功", "信息");
}
至此,基本就完成了,下面给出所有代码。
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace Test
...{
public partial class Form1 : Form
...{
private DataSet ds = new DataSet();
private SqlDataAdapter da = new SqlDataAdapter();
private DataTable tempDataTable;
private LinkDataBase link = new LinkDataBase();
//用来存放DataGridView中输入数据的最大行号
private int rowMax = 0;
public Form1()
...{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
...{
BindType();
cmb_sex.SelectedIndexChanged += new EventHandler(cmb_sex_SelectedIndexChanged);
this.dgv_type.Controls.Add(cmb_sex);
}
public void BindType()
...{
string tempStrSQL = "select Sex from Sex";
tempDataTable = link.SelectDataBase(tempStrSQL);
for (int i = 0; i < tempDataTable.Rows.Count; i++)
...{
//将Sex中性别字段传给Combobox
this.cmb_sex.Items.Add(tempDataTable.Rows[i][0]);
}
}
private void dgv_type_CurrentCellChanged(object sender, EventArgs e)
...{
if (this.dgv_type.CurrentCell.ColumnIndex == 2)
...{
Rectangle rect = dgv_type.GetCellDisplayRectangle(dgv_type.CurrentCell.ColumnIndex, dgv_type.CurrentCell.RowIndex, false);
cmb_sex.Left = rect.Left;
cmb_sex.Top = rect.Top;
cmb_sex.Width = rect.Width;
cmb_sex.Height = rect.Width;
cmb_sex.Visible = true;
}
else
...{
cmb_sex.Visible = false;
}
}
private void cmb_sex_SelectedIndexChanged(object sender, EventArgs e)
...{
if (((ComboBox)sender).Text.Trim() == "男")
...{
if (dgv_type.CurrentCell != null)
...{
dgv_type.CurrentCell.Value = "男";
dgv_type.CurrentCell.Tag = "1";
}
}
if (((ComboBox)sender).Text.Trim() == "女")
...{
if (dgv_type.CurrentCell != null)
...{
dgv_type.CurrentCell.Value = "女";
dgv_type.CurrentCell.Tag = "2";
}
}
}
private void dgv_type_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
...{
for (int i = 0; i < this.dgv_type.Rows.Count; i++)
...{
if (dgv_type.Rows[i].Cells[1].Value != null && dgv_type.Rows[i].Cells[1].ColumnIndex == 1)
...{
dgv_type.Rows[i].Cells[1].Tag = dgv_type.Rows[i].Cells[1].Value.ToString();
if (dgv_type.Rows[i].Cells[1].Value.ToString() == "1")
...{
dgv_type.Rows[i].Cells[1].Value = "男";
}
else if (dgv_type.Rows[i].Cells[1].Value.ToString() == "2")
...{
dgv_type.Rows[i].Cells[1].Value = "女";
}
}
}
}
private void btn_save_Click(object sender, EventArgs e)
...{
string tempStrSQL;
//rowMax为当前DataGridView中最大行号
for (int i = rowMax; rowMax < this.dgv_type.Rows.Count; rowMax++)
...{
if (this.dgv_type.Rows[rowMax].Cells[0].Value == null)
...{
break;
}
else
...{
string ID = dgv_type.Rows[rowMax].Cells[0].Value.ToString().Trim();
string Name = dgv_type.Rows[rowMax].Cells[1].Value.ToString().Trim();
string Sex = dgv_type.Rows[rowMax].Cells[2].Value.ToString().Trim();
string sendValues = "('" + ID + "','" + Name + "','" + Sex + "')";
tempStrSQL = "insert Name (ID,Name,Sex) values " + sendValues;
link.UpdateDataBase(tempStrSQL);
}
}
MessageBox.Show("保存成功", "信息");
}
}
}
最后的效果
第一次写这种东西,写的方法很笨,只是用做交流,同时也希望得到指教。大家共同努力!
- DataGridView中数据存入数据库方法
- 将DataGridview中的数据存入数据库
- 将数据快速存入数据库的方法
- java中Blob数据存入数据库
- dataGridView中更新数据到数据库中
- 用hibernate跨数据平台将数据存入数据库中
- C#中datagridview显示数据库数据
- [VB.NET]如何将DataGridView中的数据存入Excel文件中?
- 从Form中textBox中读取数据存入数据库
- JavaWeb项目中数据库存入数据中乱码的解决方案
- python多线程抓取数据存入数据库的方法
- 如何将批量的数据存入SQL数据库中
- 从mysql数据库中将数据存入数组中
- 解析JSON将数据存入sqlserver数据库中
- 如何将exel表中数据存入到数据库
- .net中数据存入数据库时中文变?
- 从数据库中取出数据存入memcache的过程实例
- 在Access数据库中存入系统时间的处理方法
- 使用IIS组建ASP服务器
- 《那些年啊,那些事——一个程序员的奋斗史》——77
- C#设计模式之19——备忘录模式
- 解决mysql不能被远程访问,找到两篇文章,发现都可以
- 板级设计中控制共模辐射EMI的主要步骤
- DataGridView中数据存入数据库方法
- 打印矩阵——网易有道试题
- Visual Studio 11 Beta 简单体验(二)
- 自定义UITableViewCell的accessoryView 判断哪个Button按下
- Visual Studio 11 Beta 简单体验(三)
- Visual Studio 11 Beta 简单体验(四)
- Visual Studio 11 Beta 简单体验(五)
- nyist 230(彩色棒)---并查集+Trie树
- Android学习中一些小问题的记录