DataGridView中数据存入数据库方法
将DataGridView中的数据导出至Excel中(亲测成功)

将DataGridView中的数据导出至Excel(亲测成功)一、建立一个静态方法public static void ExportAsExcel(DataGridView dgv){OutputAsExcelFile(DGVHelper.DataGridViewToTable(dgv));}二、把DataGridView中的数据转换到DataTable中///<summary>///将DataGridView中的数据转换为DataTable包含隐藏列///</summary>///<param name="dgv"></param>///<returns></returns>public static DataTable DataGridViewToTable(DataGridView dgv){DataTable dt=new DataTable();//循环列标题名称,处理了隐藏的行不显示for(int count=0;count<dgv.Columns.Count;count++){if(dgv.Columns[count].Visible==true){dt.Columns.Add(dgv.Columns[count].HeaderText.ToString());}}//循环行,处理了隐藏的行不显示for(int count=0;count<dgv.Rows.Count;count++){DataRow dr=dt.NewRow();int curr=0;for(int countsub=0;countsub<dgv.Columns.Count;countsub++){if(dgv.Columns[countsub].Visible==true){if(dgv.Rows[count].Cells[countsub].Value!=null){dr[curr]=dgv.Rows[count].Cells[countsub].Value.ToString();}else{dr[curr]="";}curr++;}}dt.Rows.Add(dr);}return dt;}三、把DataTable中的数据导出到Excel中public static void OutputAsExcelFile(DataTable dt){if(dt.Rows.Count<=0){MessM.PromptInfo("提示","无数据!");return;}SaveFileDialog s=new SaveFileDialog{Title="保存Excel文件",Filter="Excel文件(*.xls)|*.xls",FilterIndex=1};if(s.ShowDialog()==DialogResult.OK)filePath=s.FileName;elsereturn;DTExportToExcel(dt);}///<summary>///第二步:导出dataTable到Excel///</summary>///<param name="dt"></param>private static void DTExportToExcel(DataTable dt){//第二步:导出dataTable到Excellong rowNum=dt.Rows.Count;//行数int columnNum=dt.Columns.Count;//列数Excel.Application m_xlApp=new Excel.Application{DisplayAlerts=false,//不显示更改提示Visible=false};Excel.Workbooks workbooks=m_xlApp.Workbooks;Excel.Workbook workbook=workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);Excel.Worksheet worksheet=(Excel.Worksheet)workbook.Worksheets[1];//取得sheet1try{string[,]datas=new string[rowNum+1,columnNum];for(int i=0;i<columnNum;i++)//写入字段datas[0,i]=dt.Columns[i].Caption;//Excel.Range range=worksheet.get_Range(worksheet.Cells[1,1],worksheet.Cells[1, columnNum]);Excel.Range range=m_xlApp.Range[worksheet.Cells[1,1],worksheet.Cells[1, columnNum]];range.Interior.ColorIndex=15;//15代表灰色range.Font.Bold=true;range.Font.Size=10;int r=0;for(r=0;r<rowNum;r++){for(int i=0;i<columnNum;i++){object obj=dt.Rows[r][dt.Columns[i].ToString()];datas[r+1,i]=obj==null?"":"'"+obj.ToString().Trim();//在obj.ToString()前加单引號是为了防止自己主动转化格式}Application.DoEvents();//加入进度条}//Excel.Range fchR=worksheet.get_Range(worksheet.Cells[1,1], worksheet.Cells[rowNum+1,columnNum]);Excel.Range fchR=m_xlApp.Range[worksheet.Cells[1,1],worksheet.Cells[rowNum+1, columnNum]];fchR.Value2=datas;worksheet.Columns.EntireColumn.AutoFit();//列宽自适应。
NET中DataGridView数据绑定方法详解

NET中DataGridView数据绑定方法详解
1.使用数据集进行数据绑定
-创建一个数据集对象,并指定相应的表结构。
-从数据库中填充数据到数据集中。
- 将DataGridView的数据源属性设置为数据集中的表。
- 设置DataGridView的自动列生成属性为True,以自动生成列。
2.使用数据表进行数据绑定
数据表是数据集中的一种结构,它由行和列组成。
使用数据表进行数据绑定的步骤如下:
-创建一个数据表对象,并定义列名称和类型。
-从数据库中填充数据到数据表中。
- 将DataGridView的数据源属性设置为数据表。
3. 使用BindingSource进行数据绑定
- 创建一个BindingSource对象。
- 设置BindingSource的DataSource属性为数据源。
- 将BindingSource绑定到DataGridView的数据源属性上。
4.使用数据绑定源进行数据绑定
-创建一个数据绑定源对象,并指定相应的数据源。
- 将数据绑定源绑定到DataGridView的数据源属性上。
5.自定义数据绑定
如果以上方法无法满足需求,还可以使用自定义数据绑定方法。
自定义数据绑定通常涉及以下几个方面:
- 创建一个数据源类,实现数据源接口,如IList、IBindingList或ICollectionView。
- 创建一个继承自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. 对于大量数据的展示,需要注意性能优化,避免出现卡顿现象。
c#winform中,对DataGridView数据进行操作,一次性保存

c#winform中,对DataGridView数据进行操作,一次性保存需求:不能每加一条数据就操作数据库,要完成所有的数据加入界面,点击保存时才一次性保存。
加载数据时,数据源上可以有数据,并可以在界面上对数据进行增加、修改、删除。
所有操作,在点击保存时,准确地将所需要的操作结果反应到数据库中。
解决思路:先在程序中判断哪些数据要增加到数据库,哪些数据要对数据库中数据进行修改,哪些数据要进行删除。
再循环操作数据库。
#region 一次性判断并获取DataGridViewRow数据的操作情况/// <summary>/// 一次性判断并获取DataGridViewRow数据的操作情况/// </summary>/// <param name="dt">初始化DataGridView时绑定的数据源</param>/// <param name="DataGridViewRows">修改后的DataGridView.Rows</param>/// <param name="UniColumn">记录的唯一标识,可以是主键。
能保证唯一的属性就行</param>/// <returns> 返回值为Dictionary《object, int》,value值:1为新增,2为修改,3为删除,4 什么也不做</returns> public static IDictionary<object, int> GetCompareDataGridViewRows(DataTable dt, DataGridViewRowCollection DataGridViewRows, string UniColumn){IDictionary<object, int> dictlist = new Dictionary<object, int>();List<string> listOperated = new List<string>();int OperateType = -1;if (DataGridViewRows.Count > 0){for (int i = 0; i < DataGridViewRows.Count; i++){OperateType=OperateModel(dt, DataGridViewRows[i], UniColumn);if (OperateType == 1 || OperateType == 2)//添加或修改的{dictlist.Add(DataGridViewRows[i], OperateType);}listOperated.Add(DataGridViewRows[i].Cells[UniColumn].Val ue.ToString());}}for (int j = 0; j < dt.Rows.Count; j++){if (!listOperated.Contains(dt.Rows[j][UniColumn].T oString())) {dictlist.Add(dt.Rows[j][UniColumn], 3); //要删除的}}return dictlist;/***************使用方法***********************IDictionary<object, int> dictlist = CommonFunctions.GetCompareDataGridViewRows(list,dataGridView.Rows, "contct_cd");foreach (var dt in dictlist){//定义model类,从DataGridViewRow中读取数据switch (dt.Value){case 1:DataGridViewRow row = (DataGridViewRow)dt.Key;//增加到数据库代码break;case 2:DataGridViewRow row = (DataGridViewRow )dt.Key;//修改到数据库的代码break;case 3:string primarykey=(string)dt.Key;//从数据库删除的代码break;}}***********************************************/}#endregion#region 判断需要操作的类型 OperateModel/// <summary>/// 判断需要操作的类型 1为新增,2为修改,4 什么也不做/// </summary>/// <param name="modelcmp"></param>/// <returns></returns>private static int OperateModel(DataTable dt, DataGridViewRow row, string UniColumn){if (dt.Rows.Count == 0) return 1;bool isExist = false; //是否存在bool isModified = false; //是否修改过for (int i = 0; i < dt.Rows.Count; i++) //遍历list数据,一个一个判断{DataRow CurrentRow = dt.Rows[i]; //当前行if (CurrentRow[UniColumn].ToString() == row.Cells[UniColumn].Value.ToString()) //如果唯一标识相同{for (int j = 0; j < dt.Columns.Count; j++){string columnName = dt.Columns[j].ColumnName;if (CurrentRow[columnName].ToString() != row.Cells[columnName].Value.T oString()){isModified = true; break;}}isExist = true;break;}}if (isExist && isModified){return 2;}else if (!isExist){return 1;}else return 4;}#endregion提示:使用对比的不能是数据源,只有另外定义一个DataTable dtCopy=dt.Copy(); 不去操作dtCopy,对dt操作才不能影响到副本dtCopy,直接等于是不可以的。
C#datagridview和excel数据的相互导入方法

using System;using System.Data;using System.Data.OleDb;using System.IO;using System.Windows.Forms;using GemBox.ExcelLite;namespace WindowsFormsApplication5{public partial class Form1 : Form{public System.Data.DataTable biao = new System.Data.DataTable();public DataView dv = new DataView();public System.Data.DataTable temp = new System.Data.DataTable();public Form1(){InitializeComponent();shuchu();dataGridView1.DataSource = biao;//将表biao中的数据传递给datagridview显示。
this.dataGridView1.Columns["编号"].Frozen = true;}public void shuchu(){//System.Data.OleDb.OleDbConnection objConn = newSystem.Data.OleDb.OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=excell.xls;Extended Properties=Excel 8.0;");System.Data.OleDb.OleDbConnection objConn = newSystem.Data.OleDb.OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=..\excell.xls;Extended Properties=Excel 8.0;");DataSet ds = new DataSet();string TJ = "SELECT * FROM [myRange1$]";OleDbDataAdapter da = new OleDbDataAdapter(TJ, objConn);try{da.Fill(ds);}catch (Exception ex){MessageBox.Show(ex.Message);objConn.Close();return;}biao = ds.Tables[0];//将excel表中的数据读入到内存表biao中,以备后用。
数据控件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添加一行新的数据,然后单击“更新设置”按钮,完成后关闭程序再打开。
DataGridView同步更新到数据库

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 = newSqlConnection("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 = newSqlConnection("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数据到数据库<PRE class=csharp name="code">//更新按钮单击事件private void button1_Click(object sender, EventArgs e) { sa.Update((DataTable)bs.DataSource); }</PRE>。
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.myConnecti on);int intNumber = tempSqlcommand.ExecuteNonQuery();myConnection.Close();return intNumber;}}}上面这段代码很容易理解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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;}}}上面这段代码很容易理解。
大大的简化了我们的操作。
2、建立一个DataGridView控件,将其命名。
(我这里把他命名成:dgv_type)。
再加入一个Combobox控件来实现定位到某格时出现下拉列表框。
其实DataGridView具有DataGridViewCombobxColumn属性,但这样做出来的下拉框不如绑定一个Combobox控件美。
3、下面进行代码绑定将数据表Sex中的Sex字段传给Combobox做为Item使用。
public void BindType()...{string tempStrSQL = "select Sex from Sex";tempDataTable = link.SelectDataBase(tempStrSQL);for (int i = 0; i < tempDataTable.Rows.Count; i++)...{//将Sex中性别字段传给Comboboxthis.cmb_sex.Items.Add(tempDataTable.Rows[i][0]);}}4、建立DataGridView的CurrentCellChanged事件,产生当焦点进入某单元格内出现Combobox的效果private void dgv_type_CurrentCellChanged(object sender, EventArgs e)...{if (this.dgv_type.CurrentCell.ColumnIndex == 2)...{Rectangle rect = dgv_type.GetCellDisplayRectangle(dgv_type.CurrentCell.Colu mnIndex, 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()。
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";}}}6、建立DataGridView的DataBindingComplete事件,用来显示单元格内的值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 = "女";}}}}7、最后把所有的事件放到Load中private void Form1_Load(object sender, EventArgs e)...{BindType();cmb_sex.SelectedIndexChanged += new EventHandler(cmb_sex_SelectedIndexChanged);this.dgv_type.Controls.Add(cmb_sex);}现在可以在表中输入数据了。
输入数据后呢,当然我们要把他们保存到数据库内。
8、建立一个Button控件来实现数据的保存。
其中使用了一个rowMax来记录DataGridView中输入数据的最大行号。