DataGridView同步更新到数据库

合集下载

用SqlDataAdapter.Update(DataSet Ds)更新数据库.

用SqlDataAdapter.Update(DataSet Ds)更新数据库.

一. 用SqlDataAdapter.Update(DataSet Ds)更新数据库.1. DbDataAdapter调用Update 方法时,DataAdapter 将分析已作出的更改并执行相应的命令(INSERT、UPDATE 或DELETE)。

当DataAdapter 遇到对DataRow 的更改时,它将使用InsertCommand、UpdateCommand 或DeleteCommand 来处理该更改。

这样,您就可以通过在设计时指定命令语法并在可能时通过使用存储过程来尽量提高 应用程序的性能。

在调用Update 之前,必须显式设置这些命令。

如果调用了Update 但不存在用于特定更新的相应命令(例如,不存在用于已删除行的DeleteCommand),则将引发异常。

但是如果DataTable 映射到单个数据库表或从单个数据库表生成,则可以利用CommandBuilder 对象自动生成DataAdapter 的DeleteCommand、InsertCommand 和UpdateCommand。

为了自动生成命令,必须设置SelectCommand 属性,这是最低的要求。

SelectCommand 所检索的表架构确定自动生成的INSERT、UPDATE和DELETE 语句的语法。

如果在自动生成插入、更新或删除命令后修改SelectCommand 的CommandText,则可能会发生异常。

如果已修改的mandText 所包含的架构信息与自动生成插入、更新或删除命令时所使用的mandText 不一致,则以后对DataAdapter.Update 方法的调用可能会试图访问SelectCommand 引用的当前表中已不存在的列,并且会引发异常。

可以通过调用CommandBuilder的RefreshSchema 方法来刷新CommandBuilder 用来自动生成命令的架构信息。

对于DbDataAdapter.Update 方法更新数据库,每次在调用DbDataAdapter.Update(ds) 之后一定要ds.acceptchanges否则会对后面用到的ds出现意想不到的错误。

DataGridView更新数据库二则问题及解决

DataGridView更新数据库二则问题及解决

DataGridView更新数据库二则问题及解决一、“不返回任何键列信息的SelectCommand不支持UpdateCommand的动态SQL生成”问题在使用DataAdapter进行数据更新的时候,出现了一个“不返回任何键列信息的SelectCommand 不支持UpdateCommand的动态SQL生成”错误。

当我们使用适配器从数据库中读到数据,然后填充到DataSet中以后,如何要更新数据,那么,需要先改变DataSet中数据的值(也就是内存中的“副本”的值),然后再更新数据库,或者说叫同步数据库。

一般我们都是使用SqlCommandBuilder来完成的(当然,如果出于性能考虑,还可以直接指定命令而不使用CommandBuilder,另外,也不宜使用 CommandBuilder 来更新参与外键约束的列)。

出现这个错误的主要原因是:1、数据库中的表没有指定主键!因为我们更新数据,是先更新DataSet中的数据,然后同步数据库里面相应的表,这就需要主键来查找相关的记录,从而实现更新(所以,大家会发现,updateCommand和Delete Command就会出错,但是InsertCommand却不会出错)。

2、需要在DataSet中指定表的主键,或者让它自动带上相关的表架构。

这里直接将演示代码粘贴出来得了:表的结构如图所示:二、vs2005中通过datagridview更新数据库在通过datagridview更新数据库时,老是提示“当传递具有已修改行的DATAROW集合时,更新要求有效的UPDATECOMMAND 。

”的错误,查了网上的N多资料,均语言不详,不能成功更新,后来综合N多资料后,终于可以成功更新数据库了,把代码贴出来以纪念俺的N多辛苦,也为后来人提供参考。

private Boolean dbUpdate(OleDbDataAdapter adapter, DataGridView dgselect) {DataTable dtUpdate = new DataTable();OleDbCommandBuilder CommandBuiler;adapter.Fill(dtUpdate);dtUpdate.Rows.Clear();System.Data.DataTable dtShow = new System.Data.DataTable(); DataView dv;dv = new DataView();dv = (DataView)dgselect.DataSource;dtShow = (DataTable)dv.Table;int p1 = dtShow.Rows.Count;for (int i = 0; i < dtShow.Rows.Count; i++){dtUpdate.ImportRow(dtShow.Rows[i]);}int num = dtUpdate.Rows.Count;if (myConnection.State == ConnectionState.Closed){myConnection.Open();}try{CommandBuiler = new OleDbCommandBuilder(adapter);adapter.UpdateCommand = CommandBuiler.GetUpdateCommand(); adapter.Update(dtUpdate);myConnection.Close();}catch (Exception ex){MessageBox.Show(ex.Message.ToString());return false;}dtUpdate.AcceptChanges();return true;}。

用SqlDataAdapter.Update(DataSet Ds)更新数据库.

用SqlDataAdapter.Update(DataSet Ds)更新数据库.

一. 用SqlDataAdapter.Update(DataSet Ds)更新数据库.1. DbDataAdapter调用Update 方法时,DataAdapter 将分析已作出的更改并执行相应的命令(INSERT、UPDATE 或DELETE)。

当DataAdapter 遇到对DataRow 的更改时,它将使用InsertCommand、UpdateCommand 或DeleteCommand 来处理该更改。

这样,您就可以通过在设计时指定命令语法并在可能时通过使用存储过程来尽量提高 应用程序的性能。

在调用Update 之前,必须显式设置这些命令。

如果调用了Update 但不存在用于特定更新的相应命令(例如,不存在用于已删除行的DeleteCommand),则将引发异常。

但是如果DataTable 映射到单个数据库表或从单个数据库表生成,则可以利用CommandBuilder 对象自动生成DataAdapter 的DeleteCommand、InsertCommand 和UpdateCommand。

为了自动生成命令,必须设置SelectCommand 属性,这是最低的要求。

SelectCommand 所检索的表架构确定自动生成的INSERT、UPDATE和DELETE 语句的语法。

如果在自动生成插入、更新或删除命令后修改SelectCommand 的CommandText,则可能会发生异常。

如果已修改的mandText 所包含的架构信息与自动生成插入、更新或删除命令时所使用的mandText 不一致,则以后对DataAdapter.Update 方法的调用可能会试图访问SelectCommand 引用的当前表中已不存在的列,并且会引发异常。

可以通过调用CommandBuilder的RefreshSchema 方法来刷新CommandBuilder 用来自动生成命令的架构信息。

对于DbDataAdapter.Update 方法更新数据库,每次在调用DbDataAdapter.Update(ds) 之后一定要ds.acceptchanges否则会对后面用到的ds出现意想不到的错误。

vb6 datagridview控件用法

vb6 datagridview控件用法

一、VB6简介Visual Basic 6.0(VB6)是微软公司于1998年推出的一款集成开发环境(IDE),是一种基于事件驱动的第三代事件驱动语言。

它允许开发者以快速、简单的方式创建Windows应用程序。

VB6具有可视化编程的特点,允许开发者以拖拽控件的方式构建界面,极大地提高了开发效率。

二、DataGridView控件概述DataGridView控件是VB6中用于显示和编辑数据的控件,它提供了功能强大的数据表格展示能力,可以实现类似Excel表格的功能。

它是VB6中用于数据展示的重要控件之一,具有灵活性高、界面友好等特点。

三、DataGridView控件的基本用法使用DataGridView控件展示数据一般需要以下步骤:1. 在VB6的工具箱中找到DataGridView控件,将其拖拽到窗体中。

2. 设置数据源:可以通过ADODB连接数据库,或者手动添加数据到DataGridView中。

3. 配置列:可以设置每一列的名称、宽度、颜色等属性。

4. 对DataGridView进行一些基本的样式调整,比如添加边框、更换背景颜色等。

四、DataGridView控件的高级用法除了基本的展示功能外,DataGridView控件还支持一些高级用法,比如:1. 数据编辑:可以在DataGridView中实现对数据的增删改操作,通过单元格的编辑功能实现数据的实时更新。

2. 数据筛选:可以根据条件对数据进行筛选,实现灵活的数据展示。

3. 数据导出:可以将DataGridView中的数据导出为Excel表格或者其他格式的文件。

4. 事件处理:可以通过DataGridView的事件来监听用户的操作,比如单元格的点击、双击等操作。

五、DataGridView控件的注意事项在使用DataGridView控件时需要注意一些问题,比如:1. 对数据源的操作需要小心,避免出现数据同步问题。

2. 对于大量数据的展示,需要注意性能优化,避免出现卡顿现象。

datagridview自动保存修改数据

datagridview自动保存修改数据

使用到的对象:1、DataGridView: dataGridView12、BindingNavigator: bindingNavigator1(自带添加按钮btnAdd、删除按钮btnDelete)3、ToolStripButton: btnCancelEdit(添加到bindingNavigator1之中)使用到的事件:///<summary>///单元格的值改编后,执行更新、或插入操作;///</summary>///<param name="sender"></param>///<param name="e"></param>private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e){//如果关键字段"type",说明是在编辑新行的其它字段的值,不需要做如何操作;string typeTemp = dataGridView1.Rows[e.RowIndex].Cells["type"].FormattedValue.ToString();if (typeTemp == null || typeTemp.Trim().Length == 0) return;//string sqlStr = "select count(*) from Coupler where type='"+dataGridView1[0, e.RowIndex].FormattedValue.ToString() + "' ";if (ClsDataBaseOperator.execteCount(sqlStr) < 1){sqlStr = "insert into Coupler(type) values('" +dataGridView1[0, e.RowIndex].FormattedValue.ToString() + "')";ClsDataBaseOperator.executeGetLines(sqlStr);}else{sqlStr = "update Coupler set type='" + dataGridView1[0, e.RowIndex].FormattedValue.ToString() + "', PHS1900=" + dataGridView1.Rows[e.RowIndex].Cells["PHS1900"].FormattedValue.ToString() +", DCS1800=" + dataGridView1.Rows[e.RowIndex].Cells["DCS1800"].FormattedValue.ToString() +", GSM900=" + dataGridView1.Rows[e.RowIndex].Cells["GSM900"].FormattedValue.ToString() +", CDMA800=" + dataGridView1.Rows[e.RowIndex].Cells["CDMA800"].FormattedValue.ToString() +", other=" + dataGridView1.Rows[e.RowIndex].Cells["other"].FormattedValue.ToString() +", IsDefault=" + dataGridView1.Rows[e.RowIndex].Cells["IsDefault"].FormattedValue.ToString() +" where type='" + dataGridView1[0, e.RowIndex].FormattedValue.ToString() + "'";ClsDataBaseOperator.executeGetLines(sqlStr);}}///<summary>///当有单元格进入编辑状态时,需要打开“撤销编辑”按钮的可点击状态;///</summary>///<param name="sender"></param>///<param name="e"></param>private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e){this.btnCancelEdit.Enabled = true;}///<summary>///删除一条记录,删除表格的的当前行,并更新数据库;///btnDelete为navigator自带的按钮,需要添加下面事件;///</summary>///<param name="sender"></param>///<param name="e"></param>private void btnDelete_Click(object sender, EventArgs e){dataGridView1.Rows.Remove(dataGridView1.CurrentRow);string sqlStr = "delete from Coupler where type='" +dataGridView1.CurrentRow.Cells["type"].FormattedValue.ToString() + "' "; }///<summary>///撤销修改///</summary>///<param name="sender"></param>///<param name="e"></param>private void btnEdit_Click(object sender, EventArgs e){dataGridView1.CancelEdit();dataGridView1.EndEdit();}///<summary>///添加新的一行;///</summary>///<param name="sender"></param>///<param name="e"></param>private void btnAdd_Click(object sender, EventArgs e){dataGridView1.CurrentRow.Cells["PHS1900"].Value = "0";dataGridView1.CurrentRow.Cells["DCS1800"].Value = "0";dataGridView1.CurrentRow.Cells["GSM900"].Value = "0";dataGridView1.CurrentRow.Cells["CDMA800"].Value = "0";dataGridView1.CurrentRow.Cells["other"].Value = "0";dataGridView1.CurrentRow.Cells["type"].Selected = true;dataGridView1.CurrentCell = dataGridView1.CurrentRow.Cells["type"];}。

数据控件DataGridView添加、删除和修改数据库中的内容

数据控件DataGridView添加、删除和修改数据库中的内容

数据控件DataGridView添加、删除和修改数据库中的内容作者:天涯来源:中国自学编程网发布日期:1214063638介绍一个数据控件DataGridView,它是 3.5中新增加的的重要控件。

它是一种网格形式的控件,能以表格的形式显示数据,它的优势是能多行显示数据,在数据库的操作中会经常用到。

(1)打开VS2008,在D:\C#\ch14目录下建立名为DataGridViewTest的Windows应用程序,打开工程,为当前窗体添加控件,如表14-2所示。

表14-2 添加控件列表控件名NameTextDataGridViewdataGridView1ButtonbtnRef更新设置ButtonbtnDelete删除(2)接下来需要设置DadaAdapter和DataSet,方法同上一节一样。

选中DataGridView的DataSource属性。

(3)单击“下一步”按钮,选择“数据连接”图标。

(4)最后一步需要选择数据库对象,本例是要操作StudentInf数据库中的表,所以选择“表”复选框。

(5)设置完毕后,整个程序界面就设置完了。

程序界面设计完毕后,接下来要做的工作就是通过修改dataGridView1中的数据来更新数据库中的内容。

它实现的原理很简单,通过studentInfDataSet把dataGridView1绑定到Class1表,studentInfDataSet处于中间位置,所以在dataGridView1中修改的数据必须要传递到studentInfDataSet后才能改变数据库中的内容。

(1)双击“更新设置”按钮,添加如下代码。

this.sqlDataAdapter1.Update(this.studentInfDataSet);该代码的功能是调用sqlDataAdapter1的Update()方法实现对studentInfDataSet的更新。

(2)按F5键,程序运行以后,对dataGridView1添加一行新的数据,然后单击“更新设置”按钮,完成后关闭程序再打开。

关于C# -WINFORM-DataGridView的更新、删除

关于C# -WINFORM-DataGridView的更新、删除

关于C# -WINFORM-DataGridView的更新、删除一、DataGridView绑定数据库之后直接对其进行操作:1.在按钮添加更新操作代码(只需一行):this.tbTableAdapter.Update(this.abcDataSet2.tb);其中abc为数据库名,tb为表名2.在按钮添加删除操作代码:DialogResult dlResult = MessageBox.Show(this, "要删除这些记录吗?", "请确认",MessageBoxButtons.YesNo,MessageBoxIcon.Question,MessageBoxDefaultButton.Button1,MessageBoxOptions.RightAlign);if (dlResult == DialogResult.Yes){int j = dataGridView1.SelectedRows.Count;int[] l = new int[j];int i;for (i = 0; i < j; i++){l[i] = dataGridView1.SelectedRows[i].Index;}int k = 0;while (k < j){this.abcDataSet2.tb.Rows[l[k]].Delete();k++;}二、DataGridView绑定数据库,把查询结果进行更新、删除操作后保存到数据库:1.在按钮添加更新操作代码:if (MessageBox.Show("确实要修改数据库吗?", "决策提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) ==DialogResult.OK){DataTable dt = dataGridView1.DataSource as DataTable; if (dt != null){try{using (SqlConnection con = newSqlConnection("data source=ksig;initial catalog=AMDMS;userid=sa;pwd=123;")){SqlDataAdapter da = newSqlDataAdapter("select * from account", con);SqlCommandBuilder scb = new SqlCommandBuilder(da);DataSet ds = new DataSet();da.Fill(ds, "account");da.Update(dt);}}catch (DataException de){//}}MessageBox.Show("成功修改数据库!", "恭喜");}else{MessageBox.Show("放弃修改数据库!", "系统提示");}2.在按钮添加删除操作代码://在DataGridView1界面上进行可视化删除dataGridView1.Rows.Remove(dataGridView1.Rows[dataGridView 1.CurrentCell.RowIndex]);//把删除后的DataGridView1的结果更新到数据库中DataTable dt = dataGridView1.DataSource as DataTable;if (dt != null){try{using (SqlConnection con = new SqlConnection("datasource=ksig;initial catalog=AMDMS;user id=sa;pwd=123;")){SqlDataAdapter da = new SqlDataAdapter("select * from account", con);SqlCommandBuilder scb = new SqlCommandBuilder(da);DataSet ds = new DataSet();da.Fill(ds, "account");da.Update(dt);}}catch (DataException de){//}}。

datagridview ontextchanged

datagridview ontextchanged

datagridview ontextchanged题目:[DataGridView OnTextChanged],详细解析DataGridView的OnTextChanged方法引言:DataGridView是C# Windows应用程序开发中常用的数据显示控件之一,广泛应用于数据管理和展示场景。

其中OnTextChanged方法是DataGridView控件的一个事件,它在用户编辑单元格内容时触发。

本文将一步一步讲解如何使用DataGridView的OnTextChanged方法,并探讨一些常见的应用场景。

第一步:理解OnTextChanged方法的作用OnTextChanged方法是DataGridView控件的一个事件,用于在用户编辑单元格的内容发生变化时触发。

通过注册该事件,我们可以监听单元格的变化,并在发生变化时做出相应的处理。

这对于实时更新数据或验证用户输入非常有用。

第二步:注册OnTextChanged事件要使用OnTextChanged方法,我们需要在代码中手动注册事件。

可以通过以下步骤实现:1.在窗体或用户控件的初始化方法中,找到DataGridView控件的实例。

2.使用"+"运算符将事件处理方法添加到OnTextChanged事件。

3.实现事件处理方法,用于处理单元格内容变化的逻辑。

例如,下面的代码段演示了如何注册OnTextChanged事件:private void InitializeDataGridView(){DataGridView dataGridView1 = new DataGridView(); = "dataGridView1";dataGridView1.OnTextChanged += newEventHandler(DataGridView_OnTextChanged);}private void DataGridView_OnTextChanged(object sender, EventArgs e){处理单元格内容变化的逻辑}第三步:处理单元格内容变化一旦成功注册了OnTextChanged事件,我们就可以在事件处理方法中编写逻辑来处理单元格内容的变化。

datagridview中的refresh方法

datagridview中的refresh方法

datagridview中的refresh方法
datagridview控件的refresh(方法用于更新控件中的数据。

它同时刷新数据表中所有字段的内容,以便最新的数据及时出现在屏幕上。

如果你的应用程序当中有显示最新数据的需求,你可以使用DataGridView控件的Refresh(方法来实现。

DataGridView控件的Refresh(方法可以实现一下功能:
1、更新datagridview中所有显示的字段,包括新增和删除的字段内容;
2、更新数据表中的数据,所有的数据行,包括新增和更新的字段内容;
3、刷新当前行,显示最新的行内容;
4、刷新列,显示最新的列内容;
5、刷新指定的行或列,显示最新的元素内容;
使用DataGridView控件的Refresh(方法来更新显示的数据是很容易的,只需要在调用Refresh(方法时,传入更新的范围就可以了。

比如可以传入的参数为:“all”,表示更新整个数据表;“row”,表示更新当前行;“column”,表示更新当前列;“row,column”,表示更新当前行和列;“custom”,表示只更新指定的行或列,由用户自己指定行或列。

DataGridView控件的Refresh(方法是一种非常有用的技术,可以帮助开发人员更新数据表中的数据。

C#窗体连接MySql并通过DataGridView展示数据

C#窗体连接MySql并通过DataGridView展示数据

C#窗体连接MySql并通过DataGridView展⽰数据第⼀步,添加MySql.Data⼯具,⾸先,C#连接MySql数据库需要⽤到C#连接MySql数据库所⽤到的动态链接库--MySql.Data,如果没有这个⽂件⾸先我们需要将他添加进项⽬中,1.右键项⽬名,点击管理NuGet程序包:2.在浏览页⾯的搜索栏输⼊MySql.Data,如果没有安装右侧会有安装⼀栏选项,我们就可以点击右侧的安装选项进⾏安装,安装成功后我们就可以进⾏编码操作了:第⼆步,编码实现,然后,我们就可以进⼊编码阶段了,⾸先我们需要加⼊头⽂件:using MySql.Data.MySqlClient;这样我们就可以使⽤MySql.Data中的⽅法来连接数据库了,连接数据库代码如下:String connetStr = "server=127.0.0.1;port=3306;user=root;password=123; database=vs;";//usr:⽤户名,password:数据库密码,database:数据库名MySqlConnection conn = new MySqlConnection(connetStr);try{conn.Open();//打开通道,建⽴连接,可能出现异常,使⽤try catch语句Console.WriteLine("已经建⽴连接");}catch (MySqlException ex){Console.WriteLine(ex.Message);}finally{conn.Close();}如果连接数据库成功,我们就可以进⾏下⾯的操作了,取出数据并通过DataGridView展⽰出来了,代码如下:String connetStr = "server=127.0.0.1;port=3306;user=root;password=123; database=vs;";MySqlConnection conn = new MySqlConnection(connetStr);try{conn.Open();//打开通道,建⽴连接,可能出现异常,使⽤try catch语句Console.WriteLine("已经建⽴连接");string sql = "select * from salecar";MySqlCommand cmd = new MySqlCommand(sql, conn);MySqlDataReader reader = cmd.ExecuteReader();//执⾏ExecuteReader()返回⼀个MySqlDataReader对象while (reader.Read()){int index = this.dataGridView1.Rows.Add();this.dataGridView1.Rows[index].Cells[0].Value = reader.GetString("name");this.dataGridView1.Rows[index].Cells[1].Value = reader.GetString("describe");this.dataGridView1.Rows[index].Cells[2].Value = reader.GetString("price");this.dataGridView1.Rows[index].Cells[3].Value = reader.GetInt32("salenumber");}}catch (MySqlException ex){Console.WriteLine(ex.Message);}finally{conn.Close();}这样我们就完成了C#窗体连接MySql并通过DataGridView展⽰数据,下⾯是效果图和全部代码:全部代码:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using MySql.Data.MySqlClient;namespace WindowsFormsApp1{public partial class Form3 : Form{public Form3(){InitializeComponent();a();}private void button1_Click(object sender, EventArgs e){Form1 fm1 = new Form1();this.Hide();fm1.ShowDialog();Application.ExitThread();}private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e){}public void a(){String connetStr = "server=127.0.0.1;port=3306;user=root;password=123; database=vs;";MySqlConnection conn = new MySqlConnection(connetStr);try{conn.Open();//打开通道,建⽴连接,可能出现异常,使⽤try catch语句Console.WriteLine("已经建⽴连接");//在这⾥使⽤代码对数据库进⾏增删查改string sql = "select * from salecar";MySqlCommand cmd = new MySqlCommand(sql, conn);MySqlDataReader reader = cmd.ExecuteReader();//执⾏ExecuteReader()返回⼀个MySqlDataReader对象while (reader.Read()){int index = this.dataGridView1.Rows.Add();this.dataGridView1.Rows[index].Cells[0].Value = reader.GetString("name");this.dataGridView1.Rows[index].Cells[1].Value = reader.GetString("describe");this.dataGridView1.Rows[index].Cells[2].Value = reader.GetString("price");this.dataGridView1.Rows[index].Cells[3].Value = reader.GetInt32("salenumber");}}catch (MySqlException ex){Console.WriteLine(ex.Message);}finally{conn.Close();}}}}效果:数据库表:。

DataGridView中数据存入数据库方法

DataGridView中数据存入数据库方法

DataGridView做了新的数据显示控件加入到了.Net 05中,其强大的编辑能力让其成为了数据显示中必不可少的控件。

目前对于DataGridView中的更新讲的挺多的,但直接的插入数据好像讲的不是太多,下面就以我的例子说明一下。

1、首先新建一个项目。

2、建立一个数据库连接类LinkDataBase。

因为数据库操作有很多都是重复性工作,所以我们写一个类来简化对数据库的操作。

using System;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;Integr ated 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;}}}上面这段代码很容易理解。

C#DataGridView绑定数据源的几种常见方式

C#DataGridView绑定数据源的几种常见方式

C#DataGridView绑定数据源的⼏种常见⽅式 开始以前,先认识⼀下WinForm控件数据绑定的两种形式,简单数据绑定和复杂数据绑定。

1. 简单的数据绑定例1using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["connStr"].ToString())){ SqlDataAdapter sda = new SqlDataAdapter("Select * From T_Class Where F_Type='Product' order by F_RootID,F_Orders", conn); DataSet Ds = new DataSet(); sda.Fill(Ds, "T_Class"); //使⽤DataSet绑定时,必须同时指明DateMember this.dataGridView1.DataSource = Ds; this.dataGridView1.DataMember = "T_Class"; //也可以直接⽤DataTable来绑定 this.dataGridView1.DataSource = Ds.Tables["T_Class"];} 简单的数据绑定是将⽤户控件的某⼀个属性绑定⾄某⼀个类型实例上的某⼀属性。

采⽤如下形式进⾏绑定:引⽤控件.DataBindings.Add("控件属性", 实例对象, "属性名", true);例2 从数据库中把数据读出来放到⼀个数据集中,⽐如List<>、DataTable,DataSet,我⼀般⽤List<>, 然后绑定数据源:IList<student> sList=StudentDB.GetAllList();DataGridView.DataSource=sList; 如果你没有设置DataGridView的列,它会⾃动⽣成所有列。

【C#】让DataGridView输入中实时更新数据源中的计算列

【C#】让DataGridView输入中实时更新数据源中的计算列

【C#】让DataGridView输⼊中实时更新数据源中的计算列本⽂适⽤Winform开发,且DataGridView的数据源为DataTable/DataView的情况。

理解前提:熟知DataTable、DataView求:更好⽅案考虑这样⼀个场景:某DataTable(下称dt)的B列是计算列(设置了Expression属性),是根据A列的数据计算⽽来,该dt被绑定到某个DataGridView(下称dgv),A、B两列都要在dgv中显⽰,其中A列可编辑(ReadOnly=false)。

需求是对A列进⾏编辑时(输⼊或删除),B列能实时变化。

例如下⾯的例⼦:【⽬标⽂件名】是根据【款号】和【⾊号】计算⽽来(连接字符串),当编辑款号/⾊号时,⽬标⽂件名能实时变化。

熟悉dgv的猿友都知道,如果不做特别处理,是达不到上述效果的。

原因是dgv默认是等焦点离开编辑单元格(CurrentCell),才会提交更改到数据源,⽽且就算焦点离开,但如果焦点仍在同⼀⾏(即CurrentCell改变,但CurrentRow没变)的话,该⾏的源⾏也仍然处在编辑状态(DataRowView.IsEdit为true),计算列也同样不会更新。

⾮得是焦点离开这⼀⾏(去到别的⾏,或者其它控件),计算列才会更新。

——这段话信息量略⼤,不熟悉dgv提交机制的猿友可能得借助下⾯进⼀步的说明才能明⽩~⽼鸟请绕道。

先认识⼏个概念:dgv单元格:DataGridViewCelldgv⾏:DataGridViewRowdgv⾏的源⾏:DataRowView。

当dgv绑定数据源后,它的每⼀⾏就对应了数据源中的⼀⾏(或叫⼀项),这就是我所谓的【源⾏】。

可以通过DataGridViewRow.DataBoundItem属性获得,该属性类型是object,当dgv的数据源为DataTable或DataView(下称dv)时,DataBoundItem的真实类型就是DataRowView,可以理解为DataView的⾏。

datatable和datagridview绑定原理

datatable和datagridview绑定原理

datatable和datagridview绑定原理DataTable和DataGridView是.NET框架中常用的数据绑定组件,在Windows Forms应用程序中经常用于展示和编辑数据。

DataTable是内存中的表格,可以看作是一个内存中的数据库。

它由一系列的DataRow和DataColumn组成,每个DataRow代表表格中的一行数据,而DataColumn则代表列。

DataGridView是Windows Forms中的一个强大的UI控件,它可以用于展示和编辑数据。

DataGridView可以绑定到一个DataTable对象,从而将DataTable中的数据展示到DataGridView控件上。

数据绑定是一种将数据与控件关联的技术,可以使得数据的改动能随之在控件上显示和反映出来。

DataTable和DataGridView之间的数据绑定通过DataBinding实现。

首先,需要创建一个DataTable对象,并为其添加列和行,以表示数据的结构和内容。

然后,将DataTable与DataGridView进行关联绑定。

DataTable可以通过以下方式与DataGridView进行数据绑定:1. 绑定数据源使用DataGridView的DataSource属性,将DataTable赋值给其中的一个数据源,这样DataGridView就能够获取到DataTable中的数据。

```csharpDataTable dataTable = new DataTable();// 添加列dataTable.Columns.Add("ID", typeof(int));dataTable.Columns.Add("Name", typeof(string));dataTable.Columns.Add("Age", typeof(int));// 添加行dataTable.Rows.Add(1, "Tom", 20);dataTable.Rows.Add(2, "John", 25);// 绑定数据源dataGridView.DataSource = dataTable;```2. 自定义列可以通过DataGridView的Columns属性来定义列的显示方式、样式等,例如设置列名、列的类型、排序模式、是否可编辑等。

datatable和datagridview绑定原理

datatable和datagridview绑定原理

datatable和datagridview绑定原理DataTable和DataGridView是两个在.NET框架中常用的数据绑定组件,它们可以协同工作以实现数据的展示和交互。

1. DataTable的数据结构和功能DataTable是一个表示数据表格的类,它包含一系列的行和列,每行表示一个数据记录,每列表示一种数据类型。

DataTable的主要作用是存储和管理数据,具有以下功能:- 存储数据:DataTable可以通过添加行和列来存储数据,并提供了各种方法和属性用于管理数据结构。

- 数据查询:DataTable支持使用LINQ或SQL语句查询数据,使数据检索更加方便。

- 数据校验:DataTable可以对数据进行校验,确保数据的合法性和完整性。

- 数据操作:DataTable提供了各种方法和事件来操作数据,如增删改查等。

- 数据序列化:DataTable可以序列化为XML、JSON等格式,便于数据的传输和存储。

2. DataGridView的基本原理DataGridView是一个用于显示和编辑数据的控件,它可以直接绑定DataTable 或其他数据源,并在界面上显示数据。

DataGridView的基本原理如下:- 数据绑定:DataGridView通过设置DataSrouce属性将数据源绑定到控件上。

可以通过设置不同的数据源,如DataTable、List、BindingSource等,来实现不同的数据绑定方式。

- 列生成:根据数据源的结构,DataGridView会自动创建相应的列,每个列对应数据源的一个字段,用于显示和编辑数据。

- 数据更新:DataGridView可以实时反映数据源的变化,在数据源发生变化时,DataGridView会自动更新显示的数据。

- 数据交互:DataGridView提供了一系列的事件和方法,用于处理用户的交互操作,如单元格点击,行选择等。

3. DataTable和DataGridView的绑定方式DataTable和DataGridView可以通过多种方式进行绑定,常见的方式有以下几种:- 直接绑定:通过设置DataGridView的DataSrouce属性为DataTable对象,实现直接绑定。

C#对DataGridView进行添加、修改、删除数据操作

C#对DataGridView进行添加、修改、删除数据操作

C#对DataGridView进⾏添加、修改、删除数据操作数据库⽤的是本地服务器(MySql):设定全局变量:MySqlConnection conn;MySqlDataAdapter adapter;MySqlTransaction trans;1. // 数据库联接private System.Data.DataTable dbconn(string strSql){string strconn = "host=localhost;database=test;user id=root;password=";conn = new MySqlConnection();conn.ConnectionString = strconn;conn.Open();this.adapter = new MySqlDataAdapter(strSql, conn);System.Data.DataTable dtSelect = new System.Data.DataTable();int rnt=this.adapter.Fill(dtSelect);conn.Close();return dtSelect;}2. //设定DataGridView的样式private void setDgStyle(){this.dgselect.Columns.Clear();DataGridViewCheckBoxColumn colDel = new DataGridViewCheckBoxColumn();colDel.DataPropertyName = "Del"; = "Del";colDel.Selected = false;colDel.FalseValue = "0";colDel.TrueValue = "1";colDel.Width = 40;colDel.SortMode = DataGridViewColumnSortMode.NotSortable;colDel.HeaderText = "删除";colDel.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;colDel.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;this.dgselect.Columns.Insert(0, colDel);DataGridViewTextBoxColumn colID = new DataGridViewTextBoxColumn();colID.DataPropertyName = "ProductsSpecID"; = "ProductsSpecID";colID.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;colID.HeaderText = "产品规格ID";colID.Width = 160;this.dgselect.Columns.Insert(1, colID);DataGridViewTextBoxColumn colNM = new DataGridViewTextBoxColumn();colNM.DataPropertyName = "ProductsSpec"; = "ProductsSpec";colNM.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;colNM.HeaderText = "产品规格名称";colNM.Width = 160;this.dgselect.Columns.Insert(2, colNM);DataGridViewTextBoxColumn colUnit = new DataGridViewTextBoxColumn();colUnit.DataPropertyName = "ProductsSpecUnit"; = "ProductsSpecUnit";colUnit.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;colUnit.HeaderText = "产品规格单位";this.dgselect.Columns.Insert(3, colUnit);DataGridViewTextBoxColumn colPID = new DataGridViewTextBoxColumn();colPID.DataPropertyName = "ProductsID"; = "ProductsID";colPID.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;colPID.HeaderText = "产品ID";colPID.Width = 140;this.dgselect.Columns.Insert(4, colPID);DataGridViewButtonColumn colButton = new DataGridViewButtonColumn();colButton.DataPropertyName = "colSearch"; = "colSearch";colButton.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;colButton.HeaderText = "Button";colButton.Width = 80;this.dgselect.Columns.Insert(5, colButton);this.dgselect.RowHeadersWidth = 15;this.dgselect.ColumnHeadersDefaultCellStyle.Font=new System.Drawing.Font("宋体",14);}3. //修改数据,并将数据提交到数据库private Boolean dbUpdate(){string strSql = "select ProductsSpecID,ProductsSpec,ProductsSpecUnit,ProductsID from tbl_product_detail_master"; System.Data.DataTable dtUpdate = new System.Data.DataTable();dtUpdate = this.dbconn(strSql);dtUpdate.Rows.Clear();System.Data.DataTable dtShow = new System.Data.DataTable();//dtShow = (DataTable)this.bindSource.DataSource;dtShow = (System.Data.DataTable)this.dgselect.DataSource;int p1 = dtShow.Rows.Count;// try// {for (int i = 0; i < dtShow.Rows.Count; i++){DataRowState rowState=new DataRowState();rowState=dtShow.Rows[i].RowState;if (rowState==DataRowState.Added || rowState==DataRowState.Detached || rowState==DataRowState.Modified){if (this.dgselect["Del", i].Value.ToString() == "1"){dtShow.Rows[i].Delete();}}}for (int i = 0; i < dtShow.Rows.Count; i++){dtUpdate.ImportRow(dtShow.Rows[i]);}int num = dtUpdate.Rows.Count;try{this.conn.Open();trans = this.conn.BeginTransaction();MySqlCommandBuilder CommandBuiler;CommandBuiler = new MySqlCommandBuilder(this.adapter);this.adapter.Update(dtUpdate);this.conn.Close();}catch ( Exception ex){MessageBox.Show(ex.Message.ToString()); trans.Rollback();return false;}dtUpdate.AcceptChanges();return true;}。

C#通过DataGridView更新数据库

C#通过DataGridView更新数据库

C#通过DataGridView更新数据库public partial class Form1 : Form{Form1数据成员#region Form1数据成员private DataTable DT = new DataTable();private SqlDataAdapter SDA = new SqlDataAdapter();#endregionForm1构造函数#region Form1构造函数public Form1(){InitializeComponent();}#endregion连接数据库显示数据#region连接数据库显示数据private void Form1_Load(object sender, EventArgs e){SqlConnection conn = new SqlConnection("server=127.0.0. 1;database=pubs;uid=sa");SqlCommand SCD = new SqlCommand("select * from table s", conn);SDA.SelectCommand = SCD;SDA.Fill(DT);dataGridView1.DataSource = DT;}#endregion使用Update更新数据库#region使用Update更新数据库private void toolStripButton1_Click(object sender, EventArgs e){try{SqlCommandBuilder SCB = new SqlCommandBuilder(SDA);SDA.Update(DT);}catch (System.Exception ex){MessageBox.Show(ex.ToString());return;}MessageBox.Show("更新成功!");}#endregion1#region关于数据库操作的函数集,与业务无关23///<summary>4///查询数据库记录,返回存放记录的DataTable5///</summary>6///<param name="Sql">SQL查询语句</param>7///<returns>DataTable数据表</returns>8public DataTable DB_Find(string Sql)9 {10 SqlConnection dbConn = new SqlConnection( Param_Class.Param_DB.strConn);11 dbConn.Open();12 SqlDataAdapter Sda = new SqlDataAdapter(Sq l, dbConn);13 DataTable dt = new DataTable();14 Sda.Fill(dt);15 dbConn.Close();16return dt;17 }1819///<summary>20///查询数据库记录,返回存放记录的DataTable,并指定其名称21///</summary>22///<param name="Sql">SQL查询语句</param>23///<param name="TableName">指定DataT able 的名称</param>24///<returns>以TableName命名的数据表</returns> 25public DataTable DB_Find(string Sql, string Table Name)26 {27 SqlConnection dbConn = new SqlConnection( Param_Class.Param_DB.strConn);28 dbConn.Open();29 SqlDataAdapter Sda = new SqlDataAdapter(Sq l, dbConn);30 DataSet ds = new DataSet();31 Sda.Fill(ds, TableName);32 dbConn.Close();33return ds.Tables[TableName];34 }3536///<summary>37///查找数据表中是否存在某个记录38///</summary>39///<param name="Sql">SQL查询语句</param> 40///<returns>整形变量,0-没有符合记录;大于0-找到符合记录</returns>41public int IsRecorderExist(string Sql)42 {43 SqlConnection dbConn = new SqlConnection( Param_Class.Param_DB.strConn);44 dbConn.Open();45 SqlDataAdapter Sda = new SqlDataAdapter(Sq l, dbConn);46 DataTable dt = new DataTable();47 Sda.Fill(dt);48 dbConn.Close();49return dt.Rows.Count;50 }5152///<summary>53///在对应的数据表里添加新记录54///</summary>55///<param name="strTableName">需要添加记录的数据表</param>56///<param name="dt">需要添加记录的数据表所暂存的DataTable</param>57///<param name="strValues">新记录的各字段值组成的字符串数组</param>58public void Db_AddNew(string strTableName, Da taTable dt, string[] strValues)59 {60try61 {62string[] strDesField = new string[100];63string strSql = "", strField = "", strValue = "";64for (int i = 0; i < dt.Columns.Count; i++)65 {66 strDesField[i] = dt.Columns[i].ColumnNa me;67 strField += strDesField[i] + ",";68 strValue += "'" + strValues[i] + "',";69 }70int nPos = stIndexOf(@",");71 strField = strField.Substring(0, nPos);72 nPos = stIndexOf(@",");73 strValue = strValue.Substring(0, nPos);74 strSql = String.Format("INSERT INTO {0}({1}) VALUES({2})", strTableName, strField, strValue);75 SqlConnection dbConn = new SqlConnectio n(Param_Class.Param_DB.strConn);76 SqlCommand cmdAddNew = new SqlCommand(strSql, dbConn);77 dbConn.Open();78 SqlDataReader Sdr = cmdAddNew.ExecuteR eader();79 Sdr.Close();80 dbConn.Close();81 }82catch (Exception ex)83 {84 MessageBox.Show("操作失败,原因:" + ex.ToString());85 }86 }8788///<summary>89///在对应的数据表里删除记录90///</summary>91///<param name="strTableName">源数据表名</param>92///<param name="strKey">数据表主键</param> 93///<param name="strFilter">主键的匹配值</param>94public void DB_Delete(string strTableName, string strKey, string strFilter)95 {96try97 {98string strSql = String.Format("DELETE FROM {0} WHERE {1}='{2}'", strTableName, strKey, strFilter);99 SqlConnection dbConn = new SqlConnection(Param_Class.Param_DB.strConn);100 SqlCommand cmdDel = new SqlCommand (strSql, dbConn);101 dbConn.Open();102 SqlDataReader Sdr = cmdDel.ExecuteReader();103 Sdr.Close();104 dbConn.Close();105 }106catch (Exception ex)107 {108 MessageBox.Show("操作失败,原因:" + ex.ToString());109 }110 }111112///<summary>113///更新数据库中与参数中的SQL查询符合的记录,针对单条记录修改114///</summary>115///<param name="strSql">查询某条需要修改的记录的SQL语句</param>116///<param name="strValue">各字段的新值,字符串数组</param>117///<returns>更新后的数据表DataTable</returns> 118public DataTable DB_Update(string strSql, string [] strValue)119 {120 DataTable dt = new DataTable();121 dt = DB_Find(Param_Class.Param_DB.strConn,strSql);122 DataTable dtNew = new DataTable();123for (int i = 0; i < dt.Columns.Count; i++)124 {125 dt.Rows[0][dt.Columns[i].ColumnName] = s trValue[i];126 }127 SqlDataAdapter Sda = new SqlDataAdapter(s trSql, Param_Class.Param_DB.strConn);128 SqlCommandBuilder cmbUpdate = new SqlC ommandBuilder(Sda);129 Sda.Update(dt);130 dt.AcceptChanges();131return dt;132 }133#endregion。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DataGridView同步更新到数据库
一。

绑定数据SqlConnection con = null; SqlDataAdapter sa = null; SqlCommandBuilder sb = null; DataTable dt = null; BindingSource bs = null; 窗体时绑定
数据private void DataBingding_Load(object sender, EventArgs e) { con = new
SqlConnection("server=.;uid=sa;pwd=sa;database=pubs;"); try { con.Open(); sa = new SqlDataAdapter("select * from jobs", con); sb = new SqlCommandBuilder(sa);//绑定SqlDataAdapter dt = new DataTable(); sa.Fill(dt);
this.dataGridView1.DataSource = dt; bs = new BindingSource(); bs.DataSource = dt;//绑定BindingSource con.Close(); } catch (Exception ex) { con.Close(); throw ex; } } SqlConnection con = null; SqlDataAdapter sa = null; SqlCommandBuilder sb = null; DataTable dt = null; BindingSource bs = null; //加载窗体时绑定数据private void DataBingding_Load(object sender, EventArgs e) { con = new
SqlConnection("server=.;uid=sa;pwd=sa;database=pubs;"); try { con.Open(); sa = new SqlDataAdapter("select * from jobs", con); sb = new SqlCommandBuilder(sa);//绑定
SqlDataAdapter dt = new DataTable(); sa.Fill(dt);
this.dataGridView1.DataSource = dt; bs = new BindingSource(); bs.DataSource = dt;//绑定BindingSource con.Close(); } catch (Exception ex) { con.Close(); throw ex; } }二.同步DataGridView数据到数据库
&lt;PRE class=csharp name="code"&gt;//更新按钮单击事件private void button1_Click(object sender, EventArgs e) { sa.Update((DataTable)bs.DataSource); }&lt;/PRE&gt;。

相关文档
最新文档