datagridview 数据处理方法 修改 删除 添加 下拉类表
C#winfromDatagridview控件下拉菜单
C#winfromDatagridview控件下拉菜单拖拽⼀个datagridview放在界⾯,编辑列把下来菜单那列ColumnType设置成DataGridViewComboBoxColumn然后在数据⼀栏的Items可以写下来菜单的内容也可以后台代码写下⾯是后台代码实现功能private void dgUserAuthData_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e){if (dgUserAuthData.CurrentCell.ColumnIndex == 5 && dgUserAuthData.CurrentCell.ColumnIndex != -1){ComboBox combo = e.Control as ComboBox;combo.SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged);}}public void combox_Leave(object sender, EventArgs e){ComboBox combox = sender as ComboBox;//做完处理,须撤销动态事件combox.SelectedIndexChanged -= new EventHandler(ComboBox_SelectedIndexChanged);}private void ComboBox_SelectedIndexChanged(object sender, EventArgs e){try{ComboBox combo = (ComboBox)sender;combo.Leave += new EventHandler(combox_Leave);if (combo.SelectedIndex > -1){string selectedItem = combo.Text;//拿到选择后的值DataGridViewRow dv = dgUserAuthData.CurrentRow;MessageBoxButtons messButton = MessageBoxButtons.YesNo;DialogResult dr = MessageBox.Show("确定要" + selectedItem + "该⽤户吗?", "确定" + selectedItem, messButton);if (dr == DialogResult.No){return;}if (userModel.MangerVoucher == ""){MessageBox.Show("您没有管理凭证修改不了");return;}string[] colItems = { "UserPhoneNo", "AccessOperation" };string[] valueItems = new string[2];//添加新增的内容valueItems[0] = erPhoneNo; valueItems[1] = selectedItem;//判断有哪些权限,然后只能修改这些权限SQLiteDbHelper ScabHelper1 = new SQLiteDbHelper(TrhaConst.trhaSCAB);if (ScabHelper1.dbConnection.State == ConnectionState.Open){IDataReader sqReader = ScabHelper1.UpdateInto("CcUser", colItems, valueItems, "UserPhoneNo", erPhoneNo); }if (ScabHelper1.dbConnection.State == ConnectionState.Open) ScabHelper1.CloseSqlConnection();MessageBox.Show("修改成功");}}catch (Exception){}}。
数据控件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的更新、删除
//在 DataGridView1 界面上进行可视化删除 dataGridView1.Rows.Remove(dataGridView1.Rows[d ataGridView1.CurrentCell.RowIndex]); //把删除后的 DataGridView1 的结果更新到数据库中 DataTable dt = dataGridView1.DataSource as DataTable; if (dt != null) {
try {
using (SqlConnection con = new SqlConnection("data source=ksig;initial catalog=AMDMS;user id=sa;pwd=123;"))
{ SqlDataAdapter da = new
SqlDataAdapter("select * from account", con); SqlCommandBuilder scb =
1.在按钮添加更新操作代码:
if (MessageBox.Show("确实要修改数据库吗?", " 决策提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
{
DataTable dt = dataGridView1.DataSource as DataTable;
if (dt != null) {
try {
using (SqlConnection con = new SqlConnection("data source=ksig;initial catalog=AMDMS;user id=sa;pwd=123;"))
c#操作数据库的增删改查语句及DataGridView简单使用
c#操作数据库的增删改查语句及DataGridView简单使⽤下⾯是要⽤户名和密码连接数据库的操作:⼀、定义连接字符串,⽤来链接SQL Serverstring str_con = "server=.(服务器名称⼀般为 . );database=WordBook(数据库名称);uid=sa(服务器登录名);pwd=123(服务器密码)";⼆、有了链接字符串之后,开始数据库操作1、数据库查询定义了⼀个查询⽅法,⽤来调⽤:public DataSet queryDatabase(string sql) //sql是查询语句{//储存数据的⼯具初始化DataSet ds = new DataSet();//相当于链接数据库的⼀个⼯具类(连接字符串)using (SqlConnection con = new SqlConnection(str_con)){con.Open(); //打开//⽤SqlConnection⼯具链接数据库,在通过sql查询语句查询结果现存⼊sql适配器SqlDataAdapter sda = new SqlDataAdapter(sql,con); //(查询语句和连接⼯具)sda.Fill(ds); //将适配器数据存⼊DataSet⼯具中con.Close(); //⽤完关闭SqlConnection⼯具return ds;}}在需要查询数据库的地⽅调⽤此⽅法:private void query() {//查询WordBook表中,book_key字段数值为7的那⼀⾏数据//string sql = "select * from Word_Book where book_key='7'";string sql = "select * from Word_Book "; //查询全表DataSet ds = help.queryDatabase(sql); //查询到数据DataTable dt = ds.Tables[0]; //把查到的数据存⼊数据表中sqlDataResult.DataSource = dt; //把数据赋值给gridView展⽰(全表)// string str=dt.Rows[0][1].ToString();//查找表中某⼀个内容// MessageBox.Show(str);}2、数据库添加、删除、修改C#中数据库的添加、删除、修改⽤的是同断代码,所以定义了⼀个⽅法,⽤来调⽤:public int changeSqlData(String sql){using(SqlConnection con=new SqlConnection(str_con)){con.Open();//操作数据库的⼯具SqlCommandSqlCommand cmd = new SqlCommand(sql, con);//(操作语句和链接⼯具)int i=cmd.ExecuteNonQuery();//执⾏操作返回影响⾏数()con.Close();return i;}}在需要操作数据库的地⽅调⽤此⽅法:①数据库添加:private void btn_add_Click(object sender, EventArgs e){//sql添加数据 insert into 表名(字段,字段...) values(‘内容’,‘内容’...)string sql = "insert into Word_Book(book_word_CN,book_word_JP,book_word_Roma,book_nominal," +"book_gloze) values('" + book_word_CN.Text.Trim()+"','"+ book_word_JP .Text.Trim() + "','"+ book_word_Roma .Text.Trim() + "','"+ book_nominal.Text.Trim() + "','" + book_gloze.Text.Trim() + "')";int i=help.changeSqlData(sql);if (i == 0) MessageBox.Show("添加失败", "提⽰:");else MessageBox.Show("添加成功", "提⽰:");}②数据库删除:private void btn_delete_Click(object sender, EventArgs e){//根据同个字段中不同内容删除多⾏//delete from Word_Book where book_key in (1,2,3)//sql删除数据delete 表名 where 字段='内容'单个条件⽤or链接,多个条件⽤and链接string sql = "delete from Word_Book where book_key='"+book_key.Text.Trim()+"'";int i=help.changeSqlData(sql);if (i == 0) MessageBox.Show("删除失败", "提⽰:");else MessageBox.Show("删除成功", "提⽰:");}②数据库更新:private void btn_update_Click(object sender, EventArgs e){//根据条件修改多个字段内容//update 表名 set 字段='内容', 字段='内容' where 条件字段='内容'string sql = "update Word_Book set book_word_CN='"+book_word_CN.Text.Trim()+"', book_word_JP='"+book_word_JP.Text.Trim()+"'where book_key='" + book_key.Text.Trim()+"'";int i = help.changeSqlData(sql);if (i == 0) MessageBox.Show("修改失败", "提⽰:");else MessageBox.Show("修改成功", "提⽰:");}3、数据库事务操作数据库⽤数据库事务相当于把数据库操作捆绑执⾏,只要其中⼀条sql语句失败,直接返回,不进⾏数据库操作,只有全部执⾏正确,才会更新数据库。
让人郁闷的,DatagridView 添加与删除行 - 瑞德船长 - 博客园
让人郁闷的,DatagridView 添加与删除行- 瑞德船长- 博客园让人郁闷的,DatagridView 添加与删除行让人郁闷的,DatagridView 添加与删除行。
不知有没有人用过DatagridView直接添加与删除行,在DatagridView上直接添加删除有时会很方便,而且客户也喜欢。
使用过Infragistics的UltraGrid的人应该知道,在UltraGrid中删除行和添加行,只需给绑定的集合AddNew 方法即可,删除时直接把行设为Delete。
而DatagridView 却用完全不同的机制。
在DatagridView上直接调用Rows.Add());,直接添加一行发生导常,使用Row.add(value),也一样不行。
异常:Rows cannot be programmatically added to the DataGridView's rows collection when the control isdata-bound.给数据源直接添加行时,界面却一动不动,稳如泰山. 跟踪,发现行集合数,没有随着数据源增加而增加。
原来数据源一但给Datagridview后,两都就实现分开管理。
删除行时也有发生导常:“Rows cannot be programmatically removed unless the DataGridView is data-bound to an IBindingList that supports change notification and allows deletion.”再使用Invalidate 方法,界面行数没有变只是多了一行空白。
反射一下DataGridView,让我吃了一惊:当数据源不为空时就发生导常,DataSource为空还要添加行干吗?我一度怀疑微软是否支持DataGridView添加与删除。
DataGridView直接修改数据操作
DataGridView直接修改数据操作DataGridView单元格进⼊编辑模式的⽅法:双击或者f2:EditCellOnEnter 属性设为True,对DataGridView进⾏配置,当⽤户移动到该单元格后,该单元格可⽴即切换到编辑模式。
ESC取消编辑,如果将EditCellEnter属性设置为True,则单元格仍将处于编辑模式,但是所有更改都将被放弃,要提交更改,⽤户只须移动到新的单元格,或者叫焦点(focus)切换到其他控件。
为了防⽌单元格被编辑,⽤户可以设置DataGridViewCell、DataGridViewColumn·1DataGridViewRow或DataGridView的ReadOnly属性(取决于⽤户要限定更改的内容)要在DataGridView控件中修改数据,可通过CellValueChanged事件来完成using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data.SqlClient;using System.Data;namespace DataGridView直接修改数据{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){dataGridView1.DataSource = outvalue();}private DataTable outvalue() //⽤Fill(Datatable)⽅法的返回值不能是Dataset了{string constr = "server=192.168.100.222;user=sa;pwd=p@ssw1rd;database=pwd1";SqlConnection mycon = new SqlConnection(constr);DataTable mytable = new DataTable(); //定义⼀个datatable 数据表try{mycon.Open();SqlDataAdapter mydpt = new SqlDataAdapter("select * from book",mycon);mydpt.Fill(mytable); //DataAdapter 有多种重载⽅式,也可以直接写datatabledataGridView1.EditMode = DataGridViewEditMode.EditOnF2; //点击编辑单元格}catch (Exception ex){MessageBox.Show(ex.Message);}finally{mycon.Close();}return mytable;}private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) //为DataGridView创建⼀个单元格值改变事件{string constr = "server=192.168.100.222;user=sa;pwd=p@ssw1rd;database=pwd1";SqlConnection mycon = new SqlConnection(constr);try{mycon.Open();//定义⼀个字符串str1=表格控件.列【事件获取列的索引】.表头的⽂本+‘=’+单引号+表格控件.当前单元格.值.转换string类型+单引号//【e.columnIndex】为什么要⽤这个?因为我们要编辑那个⾏的时候,需要⽤到(⽐如数字监控他在bname上)要获取bname的列名字string str1=dataGridView1.Columns[e.ColumnIndex].HeaderText+"="+"'"+dataGridView1.CurrentCell.Value.ToString()+"'";//定义⼀个字符串str2=表格控件.⾏【事件获取⾏的索引】.单元格【0】.值.转换string类型//where bid=100005 这个1005怎么获取?【e.RowIndex】获取⾏的索引.因为100005在单元格中第1⾏,(索引器从0开始的0就是1),在获取这个上⾯的值.转换成string类型string str2=dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();//关联str1和str2 执⾏update 的时候就相当于把条件获取string变量上string sqlupdate = "update book set "+str1+" where bid="+str2;//为什么⽤sqlcommand,不⽤dataadapter呢?因为SqlCommand下⾯有个⽅法ExecuteNonQuery,它ExecuteNonQuery()不返回任何值,⼀把应⽤于 insert update delete语句中 SqlCommand mycom = new SqlCommand(sqlupdate, mycon);mycom.ExecuteNonQuery(); //⽤到只能更新的⽅法来交互数据库更新}catch (Exception ex){MessageBox.Show(ex.Message);}finally{mycon.Close();}}}}。
datagridview数据绑定操作数据库实现增删改查
datagridview数据绑定操作数据库实现增删改查DataSet数据集,数据缓存在客户端内存中,⽀持断开式连接.DataGridView控件绑定DataSet时,它⾃动的改变的DS的⾏的状态,⽽且在做增删改查的时候,可以借助SqlCommandBuilder类来完成.SqlCommandBuilder必须执⾏SELECT命令来检索元数据,所以它要求多往返服务器⼀次,从⽽增加了应⽤程序的开销,⽽且操作的表必须要有主键约束。
优点是⾃动建⽴insertcommand等命令1,添加操作private void button2_Click(object sender, EventArgs e){using (SqlConnection con = new SqlConnection(connstring)){con.Open();dapt = new SqlDataAdapter("select stucode,spcode,ctcode,stunits from stunits", con);SqlCommandBuilder sdb = new SqlCommandBuilder(dapt);DataSet ds1 = ds.GetChanges();if (ds.HasChanges()){try{dapt.Update(ds, "stunit");MessageBox.Show("保存成功", "提⽰");}catch (SqlException ex){MessageBox.Show(ex.Message);}}}this.dataGridView1.AllowUserToAddRows =false;}2)删除操作(选中整⾏)private void 删除ToolStripMenuItem_Click(object sender, EventArgs e){using (SqlConnection con = new SqlConnection(connstring)){//con.Open();StringBuilder sb =new StringBuilder();sb.Append("delete stunits where stucode='"+this.dataGridView1.SelectedCells[0].Value.ToString()+"'");SqlCommand cmd = new SqlCommand(sb.ToString(), con);dapt.DeleteCommand = cmd;int rowindex = this.dataGridView1.CurrentCell.RowIndex;ds.Tables["stunit"].Rows[rowindex].Delete();//修改⾏的状态// string celltext = this.dataGridView1.SelectedCells[rowindex].Value.ToString();// MessageBox.Show(celltext);if(ds.HasChanges(DataRowState.Deleted)){try{dapt.Update(ds, "stunit");MessageBox.Show("删除成功", "提⽰");}catch (SqlException ex){MessageBox.Show(ex.Message);}}}}2)删除操作(单击第⼀个单⽆格删除)private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e){if (e.ColumnIndex == 0 && e.RowIndex >= 0){using (conn = new SqlConnection(con)){conn.Open();StringBuilder sb = new StringBuilder();sb.Append("delete zy_bbxmxx where 代码='" + this.dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString()+"'");//MessageBox.Show(sb.ToString());dapt.DeleteCommand = new SqlCommand(sb.ToString(), conn);DialogResult answer = MessageBox.Show("是否删除", "提⽰", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation); if (answer == DialogResult.Yes){try{ds.Tables[0].Rows[e.RowIndex].Delete();//改变⾏的状态dapt.Update(ds, "zy_bbxx");MessageBox.Show("删除成功");}catch (SqlException ex){MessageBox.Show(ex.Message);}}}}}3)修改操作private void 修改ToolStripMenuItem_Click(object sender, EventArgs e){using (SqlConnection con = new SqlConnection(connstring)){con.Open();//DataSet ds1 = ds.GetChanges();dapt = new SqlDataAdapter("select stucode,spcode,ctcode,stunits from stunits", con);SqlCommandBuilder sdb = new SqlCommandBuilder(dapt);if (ds.HasChanges()){try{dapt.Update(ds, "stunit");MessageBox.Show("修改成功","提⽰");}catch (SqlException ex){MessageBox.Show(ex.Message);}}}或者private void btnEdit_Click(object sender, EventArgs e){using (SqlConnection conn=new SqlConnection(con)){DataSet ds1 = ds.GetChanges();//得到修改后的DataSetif (ds1 != null){try{dapt = new SqlDataAdapter("select * from zy_bbxmxx", conn);SqlCommandBuilder sb = new SqlCommandBuilder(dapt);dapt.Update(ds,"zy_bbxx");MessageBox.Show("修改成功");}catch (ArgumentNullException ex){MessageBox.Show(ex.Message);}}}}4)查询操作private void textBox5_TextChanged(object sender, EventArgs e){this.dataGridView2.DataSource = ds.Tables[1];DataView dv = ds.Tables[1].DefaultView;dv.RowFilter = "stucode like '" + '%' + this.textBox5.Text + '%' + "'"; this.dataGridView2.DataSource = ds.Tables[1];}。
WinForm中DataGridView添加,删除,修改操作具体方法
WinForm中DataGridView添加,删除,修改操作具体⽅法1.添加操作,代码如下:复制代码代码如下:IList<SelfRun> selfRunConfigs = new List<SelfRun>();private void btnNewConfig_Click(object sender, EventArgs e){try{string _lampNo = UpDownSelfLampNo.Value.ToString();int _ctrlGpNo = Convert.ToInt16(UpDownCtrlGpCnt.Value);string _opWay = string.Format("{0}", rbConfig.Checked == true ? 1 : 0);string _opCtuch = GetSelectedCtuCh();if (CheckNewConfigIsLega(_ctrlGpNo, _opCtuch)){string _opType = rbCgOpen.Checked == true ? "01" : rbCgClose.Checked == true ? "00" : "02";selfRunConfigs.Add(new SelfRun(_opCtuch, _opType, Convert.ToInt32(UpDownTime.Value)));}BindGridViewForIList<SelfRun>(gcConfigShow, selfRunConfigs);}catch (Exception ex){MessageBox.Show(string.Format("新增配置失败,原因:{0}", ex.Message.Trim()));}}private void BindGridViewForIList<T>(DataGridView gv, IList<T> datasource){BindingList<T> _bindinglist = new BindingList<T>(datasource);BindingSource _source = new BindingSource(_bindinglist, null);gv.DataSource = _source;}SelfRun实体类代码如下:复制代码代码如下:public struct SelfRun{public SelfRun(string _opCtuCh, string _opWay, int _opTime): this(){OpCtuCh = _opCtuCh;OpWay = _opWay;OpTime = _opTime;}public string OpCtuCh{get;set;}public string OpWay { get; set; }public int OpTime { get; set; }}界⾯绑定,如图:效果如图:2.修改操作,代码如下:其实思路很简单,就是点击⾏的时候,获取⾏内数据信息,然后填充到控件内,修改后,点击‘修改配置'后即可保存修改。
Winform(DataGridView)控件及通过此控件中实现增删改查
Winform(DataGridView)控件及通过此控件中实现增删改查:显⽰数据表,通过此控件中可以实现连接数据库,实现数据的增删改查⼀、后台数据绑定:List<xxx> list = new List<xxx>();dataGridView1.DataSource = list;//设置不⾃动⽣成列,此属性在属性⾯板中没有dataGridView1.AutoGenerateColumns = false;//取消加载默认选中第⼀⾏dataGridView1.ClearSelection();⼆、前台:⼩三⾓箭头,取消可编辑,添加,删除功能;Columns集合属性中,添加列HeaderText中设置显⽰的⽂本DataPropertyName设置绑定的字段名或数据库列名SelectionMode --设置选择⽅式,FullRowSelect只能选中⾏MultiSelect --是否可以选中多⾏内容三、取值:取出选中的单元格的值:dataGridView1.SelectedCells中放着全部选中的单元格if(dataGridView1.SelectedCells.Count > 0){MessageBox.Show(dataGridView1.SelectedCells[0].Value.ToString());}取出选中的⾏内容:if(dataGridView1.SelectedRows.Count > 0){MessageBox.Show(dataGridView1.SelectedRows[0].Cells[0].ToString());}获取⽤于填充⾏绑定的对象://⾏对象使⽤属性:DataBoundItemstudent sss = dataGridView1.SelectedRows[0].DataBoundItem as student;四、删除加确认MessageBoxButtons btn = MessageBoxButtons.YesNoCancel;if (MessageBox.Show("确定要删除么?", "删除数据", btn) == DialogResult.Yes){}五、多条件查询如果⽤户什么都不输⼊,或者⽂本框是空,这时候是查询所有//做两个恒成⽴的条件string tj1 = " 1=1 ";string tj2 = " 1=1 ";//根据⽤户输⼊来改变条件//如果⽤户输⼊了姓名if (name != ""){tj1 = " Name like @name ";}//如果⽤户输⼊了民族if (nation != ""){tj2 = " Nation = @nation ";}//拼接成完整条件string ztj = " where "+tj1+" and "+tj2;。
使用DataGridView进行增删改查,并同步到数据库
使用DataGridView进行增删改查,并同步到数据库DataGridView控件具有极高的可配置性和可扩展性。
它提供有大量的属性、方法和事件,可以用来对该控件的外观和行为进行自定义。
下面通过一个小例子来展示DataGridView进行增删改查,并同步到数据库的功能。
窗体展示:用户需求:1.当窗体显示时,将数据库中用户表中的数据显示出来。
2.选中一行,执行删除操作,同时在数据库中相应数据被删除。
3.双击某个数据,进行编辑,或者在空白行添加新的数据,然后点击更新,数据库随之更新。
代码展示:[vb] view plaincopyPublic Class Form1'代码较简单,没有使用三层架构。
Public DT As DataTable Public SDA As SqlDataAdapter Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.LoadDim conn = NewSqlConnection("Server=***;DataBase=userinfo;UserID=***;Password=***") SDA = New SqlDataAdapter("select * from Users", conn) DT = New DataTable SDA.Fill(DT) '将查到的数据传到DataTable中DataGridView1.DataSource = DT '将DataTable中的数据传给DataGridView1显示End Sub '更新操作Private SubbtnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click Dim SCB = New SqlCommandBuilder(SDA) SDA.Update(DT) MsgBox("更新成功") End Sub '删除操作Private Sub btnDel_Click(sender As Object, e As EventArgs) Handles btnDel.Click '删除选中行DataGridView1.Rows.RemoveAt(DataGridView1.CurrentCell. RowIndex) '数据库中进行删除Dim SCB = New SqlCommandBuilder(SDA)SDA.Update(DT) MsgBox("删除成功")End Sub End Class注意:1.数据库中相应的表中一定要有主键。
C#DataGridView绑定List对象时,利用BindingList来实现增删查改
C#DataGridView绑定List对象时,利⽤BindingList来实现增删查改当DataGridView的DataSource是DataTable的时候,DataTable的数据改变时,DataGridView的数据会随之改变,⽆需重新绑定到DataGridView。
当DataGridView的DataSource是泛型List,当List的数据改变时,则需要先将DataGridView的DataSource设置为new List<T>(),再将改变后的List<T>赋给DataGridView的DataSource。
绑定List时,注意:切莫将DataGridView的DataSource设置为Null,否则会破坏DataGridView的列结构。
如果要对绑定在DataGridView中的List<T>进⾏数据的添加删除,先要把List<T>转换成BindingList<T>,再进⾏绑定:DataGridView.DataSource=new BindingList<T>(new List<T>)。
否则的话会产⽣许多意想不到的错误。
如:初始绑定空数据后再添加数据绑定后,却取不到DataGridView.CurrentCell属性。
IList<T> list= new List<T>();DataGridView.DataSource=list;//DataGridView的⾏不能添加删除DataGridView.DataSource=new BindingList<T>(list);//DataGridView的⾏可以添加删除(只有允许添加⾏、删除⾏)⽰例代码:public partial class ucServer : UserControl{private List<ServerInfo> serverList;private BindingList<ServerInfo> dataBindings;public ucServer(List<ServerInfo> serverList){InitializeComponent();if (serverList == null)serverList = new List<ServerInfo>();this.serverList = serverList;dataBindings = new BindingList<ServerInfo>(this.serverList);}private void ucChecker_Load(object sender, EventArgs e){this.dgParams.DataSource = dataBindings;}private void llDownloadUrl_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e){MessageBox.Show("请设置下载地址。
DataGridView的增删改及复制粘贴
DataGridView中直接增删改查的方法—追加了复制粘贴功能在 或C#中对于直接增删改DataGridView中的记录,用户更易接受,虽然DataGridView本身提供Update的方法(该仅需有Select语句即可)可将添加或删除或更新的的记录同时更新至底层数据库,但该方法模拟Excel的操作,如用户未点击保存按钮,用户此前所做的添加修改或更新的操作无法反映到底层数据库,若此时有别的用户也在访问该表格,系统所显示的还是旧的数据而不是最新的;另外系统所提供的Update方法仅适用于单表查询结果的操作,而对于关联表查询的操作则无能为力。
下面的提供的方法所有的操作必须要手动完成,select,update,delete,insert的语句全部有编程人员手动加入。
在DataGridView中可通过其本身直接增加记录,修改记录,以及删除记录。
为了保证修改及删除的功能正常运行,数据库在设计表时必须要添加自动编号ID。
添加记录:一般添加时,用Insert方法可模拟向数据库添加空白记录,以获取数据库的自动编号,随后利用修改功能输入其他字段的数据。
修改记录:修改记录时利用DataGridiView的CellEndEdit事件直接修改,每修改完一个单元格即触发该事件,该事件再调用Update方法更新到数据库中的记录。
避免数据库表中添加了新的字段而必须修改Update 的sql语句。
删除记录:有了ID后,删除记录也变得更简单,只需将所有欲删除的记录选中,最后由数据库的Delete方法删除选择的记录。
以上方法每一次动作均直接与数据库关联,保证数据库中的数据都是最新的,一般对于局域网中的操作比较合适。
直接上项目:将DataGridView控件拉入窗体中,打开其属性,修改AllowUserToAddRows 与AllowUserToDeleteRows 均为False,如下图。
.同时必须将下面的删除和添加按钮删除,加入自己的删除按钮和添加按钮。
关于DataGridView控件单元格实现下拉选择以及其他
关于DataGridView控件单元格实现下拉选择以及其他在vs. net的开发里,不得不说DataGridView控件是很强大而好用,最近做项目,有了三点新的学习,现在记录如下:一:在单元格里实现下拉选择框原理很简单:就是定义一个DataGridViewComboBoxCell,并给其赋值(一般是一个数据源DataTabel),而后将它绑定指定的单元格就可以了。
请看代码:/// <summary>/// 绑定ComBoBox列表到DataGridView控件里/// </summary>/// <param name="dgv"></param>private void InitDataGridViewComBoBox(int rowNumber,DataGridView dgv){DataRow drRows;//数据通道下来列表的绑定DataTable dtPrint_Data = new DataTable();dtPrint_Data.Columns.Add("Print_Data");drRows = dtPrint_Data.NewRow();drRows.ItemArray = new string[] { "Print_data" };dtPrint_Data.Rows.Add(drRows);DataGridViewComboBoxCell dgvComBoBoxPrint_Data = new DataGridViewComboBoxCell();dgvComBoBoxPrint_Data.DisplayMember = "Print_Data";dgvComBoBoxPrint_Data.ValueMember = "Print_Data";dgvComBoBoxPrint_Data.DataSource = dtPrint_Data;//字体的绑定DataTable dtFontNames = new DataT able();dtFontNames.Columns.Add("FontNames");foreach (FontFamily ff in FontFamily.Families){drRows = dtFontNames.NewRow();drRows.ItemArray = new string[] { };dtFontNames.Rows.Add(drRows);}DataGridViewComboBoxCell dgvComBoBoxFontNames = new DataGridViewComboBoxCell();dgvComBoBoxFontNames.DisplayMember = "FontNames";dgvComBoBoxFontNames.ValueMember = "FontNames";dgvComBoBoxFontNames.DataSource = dtFontNames;//绑定类型DataTable dtType = new DataTable();dtType.Columns.Add("Type");drRows = dtType.NewRow();drRows.ItemArray = new string[] { "文本" };dtType.Rows.Add(drRows);drRows = dtType.NewRow();drRows.ItemArray = new string[] {"字段"};dtType.Rows.Add(drRows);drRows = dtType.NewRow();drRows.ItemArray = new string[] { "国标码" };dtType.Rows.Add(drRows);drRows = dtType.NewRow();drRows.ItemArray = new string[] {"内部码"};dtType.Rows.Add(drRows);drRows = dtType.NewRow();drRows.ItemArray = new string[] {"图片" };dtType.Rows.Add(drRows);DataGridViewComboBoxCell dgvComBoBoxTypes = new DataGridViewComboBoxCell();dgvComBoBoxTypes.DisplayMember = "Type";dgvComBoBoxTypes.ValueMember = "Type";dgvComBoBoxTypes.DataSource = dtType;//字段名称绑定DataTable dtDBText = new DataTable();dtDBText.Columns.Add("DBTextX");string strSelectPrint_FieldNames = "select chinesename from Print_FieldNames;";DataSet dtSelectPrint_FieldNames = myCom.DataSelectReader(strSelectPrint_FieldNames, sqlLocalhost);if (dtSelectPrint_FieldNames.Tables[0].Rows.Count > 0){for (int i = 0; i < dtSelectPrint_FieldNames.Tables[0].Rows.Count; i++) {drRows = dtDBText.NewRow();drRows.ItemArray = new string[] { dtSelectPrint_FieldNames.Tables[0].Rows[i][0].T oString() };dtDBText.Rows.Add(drRows);}}DataGridViewComboBoxCell dgvComBoBoxDBTextX = new DataGridViewComboBoxCell();dgvComBoBoxDBT extX.DisplayMember = "DBT extX";dgvComBoBoxDBT extX.ValueMember = "DBTextX";dgvComBoBoxDBT extX.DataSource = dtDBText;//将它绑定到表格控件里去dgv.Rows[rowNumber].Cells[3] = dgvComBoBoxPrint_Data;dgv.Rows[rowNumber].Cells[7] = dgvComBoBoxFontNames;dgv.Rows[rowNumber].Cells[1] = dgvComBoBoxTypes;dgv.Rows[rowNumber].Cells[4] = dgvComBoBoxDBTextX;}二、注意结束编辑状态请先看下图,我要选择面料成分(想选择2行数据),可是结果我取出的结果只有1行数据,因为第二行数据还处在编辑状态,.net 认为你还没有结束呢,当然不会给你计算在内,遇到这样的情况,我们就需要先将编辑状态结束掉才可以正确的选择所要的数据,而所用的代码很简单,就一句:this.dataGridView1.EndEdit();//先结束编辑状态三、删除DataGridView控件里的行我们知道删除DataGrid里的指定行是比较简单的,使用this.dataGridView1.Rows.Remove(row);就可以了,如果要我们删除被选中的行(也许用户只选择了其行的一个单元格,他说我现在想把这行给删除了,或者他选择的行并不是连续的),那么我们该怎么办呢?经过思考,可以这么办,请先看下下面的图不多说原理了,直接代码上:if (this.dataGridView1.Rows.Count > 1){if (this.dataGridView1.SelectedRows.Count > 0){if (MessageBox.Show("您确定要删除所选的行么?", "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes){//先检查一下模板的明细是否存在string strSelectPrint_ModeMaster_Check = "select MasterID from Print_ModeMaster where name='" + this.txtModeName.Text.Trim() + "';";DataSet dtSelectPrint_ModeMaster_Check = myCom.DataSelectReader(strSelectPrint_ModeMaster_Check, sqlLocalhost);if (dtSelectPrint_ModeMaster_Check.Tables[0].Rows.Count > 0){//再检查一下明细的记录是否存在for (int i = 0; i < this.dataGridView1.SelectedRows.Count; i++) {this._DeleteRowsArrayList.Add(dtSelectPrint_ModeMaster_C heck.Tables[0].Rows[0][0].ToString() + "&" + this.dataGridView1.SelectedRows[i].Cells[0].Value.T oString());}}//删除行的操作foreach (DataGridViewRow row in this.dataGridView1.SelectedRows){if (!row.IsNewRow)//判断是否是新行{this.dataGridView1.Rows.Remove(row);}}}}else{if (MessageBox.Show("您确定要删除所选的行么?", "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes){//选的单元格的行ArrayList _SelectRowsArrayList = new ArrayList();for (int i = 0; i < this.dataGridView1.SelectedCells.Count; i++) {_SelectRowsArrayList.Add(this.dataGridView1.SelectedCells[i ].RowIndex);}ArrayList SelectRowsArrayList = myCom.ArrayListRepeatMove(_SelectRowsArrayList);//MessageBox.Show(SelectRowsArrayList.Count.ToString());//先检查一下模板的明细是否存在string strSelectPrint_ModeMaster_Check = "select MasterID from Print_ModeMaster where name='" + this.txtModeName.Text.Trim() + "';";DataSet dtSelectPrint_ModeMaster_Check = myCom.DataSelectReader(strSelectPrint_ModeMaster_Check, sqlLocalhost);if (dtSelectPrint_ModeMaster_Check.Tables[0].Rows.Count > 0){for (int i = 0; i < this.dataGridView1.SelectedCells.Count; i++) {this._DeleteRowsArrayList.Add(dtSelectPrint_ModeMaster_C heck.Tables[0].Rows[0][0].ToString() + "&" + this.dataGridView1[0,this.dataGridView1.SelectedCells[i].RowIndex].Value.ToString());}}//删除行的操作//this.ListBoxPrint_ModeMaster.SelectedItem = this.txtModeName.Text.Trim();//this.ListBoxPrint_ModeMaster_SelectedValueChanged(sen der,e);ArrayList _myDeleteRows = myCom.ArrayListRepeatMove(this._DeleteRowsArrayList);for (int j = 0; j < _myDeleteRows.Count; j++){string strKey_Id = _myDeleteRows[j].ToString().Split(new char[] { '&' })[1];foreach (DataGridViewRow row in this.dataGridView1.Rows) {if (!row.IsNewRow){if (row.Cells[0].Value.ToString().Trim() == strKey_Id){this.dataGridView1.Rows.Remove(row);}}}}}}}总结: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;}。
winform datagridview 用法
winform datagridview 用法
WinForm中的DataGridView是一个非常强大的控件,它可以展示和编辑数据,还可以支持排序、筛选和分页等功能。
以下是DataGridView的使用方法:
1. 添加DataGridView控件到窗体中。
2. 设置DataGridView的数据源,可以是列表、数组或DataTable等。
3. 设计DataGridView的列,包括列的宽度、显示名称、数据类型等。
4. 配置DataGridView的显示属性,如是否允许排序、是否显示分页等。
5. 编写代码来填充和操作DataGridView的数据源,如添加、删除、编辑等。
6. 处理DataGridView的事件,如单元格点击、选中行改变等。
7. 为DataGridView添加自定义控件,如复选框、下拉框等。
8. 对DataGridView进行格式化,如日期格式化、货币格式化等。
9. 添加DataGridView的上下文菜单,为用户提供更多的操作选项。
以上是WinForm中DataGridView的基本用法,希望对大家有所帮助。
C#WinForm中DataGridView的修改删除功能
C#WinForm中DataGridView的修改删除功能这⾥是⾃⼰做的修改和删除,点击修改时弹出修改窗体,点击删除时弹出"确认删除"的对话框.这⾥主要是说明,如何在DataGridView中获取到单击的相应按钮.WinForm中的DataGridView不像web下的GridView控件,可以直接给加⼊的修改,删除LinkButton添加事件,从⽽对⾏处理.在WinForm中,必须要获取到单击的是哪类按钮,才能对相应的按钮作相应的处理.⾸先,在DataGridView(dgvTest)中加⼊两个DataGridViewLinkColumn类型的列,其Name分别设置为update和delete,Text分别为修改,删除.把两列的UseColumnTextForLinkValue设为true,意为设置列的⽂本.然后在DataGridView的Cell_Click中添加获取单击相应控件的代码,并进⾏相应的事件处理,代码参考如下:private void dgvUsers_CellClick(object sender, DataGridViewCellEventArgs e){string action = dgvUsers.Columns[e.ColumnIndex].Name;//操作类型switch (action){case "update"://获取相应列的数据ID,弹出加载了该ID数据详细信息的Form,⽤以修改break;case "Delete":if (MessageBox.Show("确定删除吗?", "删除提⽰", MessageBoxButtons.OKCancel) == DialogResult.OK){//获取相应列的数据ID,删除此数据记录}break;default:break;}}主要是通过加⼊列的Name来识别所点击的项.获取所单击⾏的各个Cell信息和值,参数e中有RowIndex和ColumnIndex.再通过DataGridView 的Rows,Columns,Cells即可得到值.详细的不多写......。
DataGridView的添加、编辑、更新
DataGridView的添加、编辑、更新转载于太上老君的个人资料今天说说DataGridView吧,在一个小项目中用到了这个。
面对的问题是要在DataGridView 中编辑、更新其中的值,然后怎么回写到数据库中?一开始的想法也是用循环读取Cell,然后自己手动回写到数据库中,但总觉得不方便,认为微软会把这些工作封装好的,就上网查了一下,发现确实有这个功能。
先描述一下数据库中的结构表1 表2ID Name SexID ID Sex1 A 1 1 男2 B 2 2 女3 C 2一开始的绑定是很容易的,但绑定后更新不了数据库中的值,一更新就提示SexID的值是没设置数据源的,因为SexID是外键。
还好在网上查到了一个折中的解决办法,是在建立一个DataTable自己做映射:DataTable dtRelation = new DataTable();dtRelation.Columns.Add("Code",typeof(byte));dtRelation.Columns.Add("DisplayString",typeof(string));dtRelation.Rows.Add(new object[] { 0, "苹果" });dtRelation.Rows.Add(new object[] { 1, "香蕉" });dtRelation.Rows.Add(new object[] { 2, "西瓜" });2.设置下拉列表列(DataGridViewComboxColumn)属性:下拉列表列.DataSource = dtRelation;下拉列表列.ValueMember = "Code";下拉列表列.DisplayMember = "DisplayString";下拉列表列.DataPropertyName = 数据源.列名;后来我发现其实不用DataTable也可以直接让DataGridView完成绑定2个表的操作,而且更新时是可以直接更新的:SqlDataAdapter da;SqlCommand cmd;SqlCommandBuilder cmdBuilder;DataSet ds;private void DataBind(){da = new SqlDataAdapter(cmd);cmdBuilder = new SqlCommandBuilder(da);ds = new DataSet();da.Fill(ds, "Students");dataGridView1.AutoGenerateColumns = false;//绑定数据源dataGridView1.DataSource = ds.Tables["Students"];Column1.DataPropertyName = ds.Tables["Students"].Columns[1].ColumnName;Column2.DataPropertyName = ds.Tables["Students"].Columns[2].ColumnName;Column3.DataPropertyName = ds.Tables["Students"].Columns[3].ColumnName;//初始化性别string sql_Sex = "select * from Sex";SqlCommand cmd_Sex = new SqlCommand(sql_Sex, Main.Conn);SqlDataAdapter da_Sex = new SqlDataAdapter(cmd_Sex);DataSet ds_Sex = new DataSet();da_Sex.Fill(ds_Sex, "Sex");Column3.DataSource = ds_Sex.Tables["Sex"];Column3.DisplayMember = "Value";Column3.ValueMember = "ID";}string sqlSTR = "select * from Students";cmd = new SqlCommand(sqlSTR, Main.Conn);DataBind();至此,我们已经成功将DataGridView绑定了2个表,而且不用DataTable做中间层。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Datagridview的三种处理数据方法一、第一种方法常规方法,在窗口界面上放入一个datagridview,在放各个textbox,然后通过选取对应的记录,修改textbox的值,所有的操作都在一个界面上进行,没什么多说的,大部分方法都这么做二、弹出窗口方式此方式,通过双击记录,或者是利用按钮操作,倾向于用按钮方式,一次修改或添加、删除一条记录。
利用窗口传值方式,实现数据输入、输出,datagridview的显示跟新。
特点:1。
父子窗口之间的双向传值,很有参考意义2.父子窗体监combox绑定数据表条件下,双向传值,很多资料接收的都不是很清晰,主要是利用了combox.findstring()这个方法,传递回index,利用index得到value,好绕啊,废了很大劲。
3.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 monClass;namespace WDZ{public partial class frmMain2 : Form{public frmMain2(){InitializeComponent();}private void frmMain2_Load(object sender, EventArgs e){this.dataGridView1.AutoSizeColumnsMode =System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; //表格自适应宽度//DataCon datacon = new DataCon();//加载数据DataOperate dataoperate = new DataOperate();string strSql = "select * from sql3 ";DataSet ds = dataoperate.getDs(strSql, "sql3");dataGridView1.DataSource = ds.Tables[0];//设置datagridview属性dataGridView1.Columns[0].ReadOnly = true; //列不可编写dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; //选择全行//dataGridView1.ReadOnly = true; //只读dataGridView1.DefaultCellStyle.SelectionBackColor = Color.YellowGreen; //选择的行为颜色//最后一行的星号行不显示,不允许用户添加数据dataGridView1.AllowUserToAddRows = false;//*************************//加载下拉列表框BindSex(); // 绑定性别下拉列表框cmb_Temp.Visible = false; // 设置下拉列表框不可见// 添加下拉列表框事件cmb_Temp.SelectedIndexChanged += newEventHandler(cmb_Temp_SelectedIndexChanged);// 将下拉列表框加入到DataGridView控件中this.dataGridView1.Controls.Add(cmb_Temp);}/////**************************************************//datagridview中下拉类表框的绑定private ComboBox cmb_Temp = new ComboBox();///绑定性别下拉列表框///private void BindSex(){DataTable dtSex = new DataTable();DataOperate dataoperate = new DataOperate();string strSql = "select * from user_class ";DataSet ds = dataoperate.getDs(strSql, "user_class");dtSex = ds.Tables[0];cmb_Temp.ValueMember ="user_class_id"; //设置隐含的形式显示数值,起对应一定的名称//cmb_Temp.ValueMember = "user_class";cmb_Temp.DisplayMember = "user_class";cmb_Temp.DataSource = dtSex;cmb_Temp.DropDownStyle =ComboBoxStyle.DropDownList; //只能选择,不能写入//cmb_Temp.DropDownStyle =ComboBoxStyle.DropDown; //可以写入// cmb_Temp.DropDownStyle = ComboBoxStyle.Simple;}///// 当用户选择下拉列表框时改变DataGridView单元格的内容private void cmb_Temp_SelectedIndexChanged(object sender, EventArgs e){if (dataGridView1.CurrentCell != null){DataRowView myrowview = (DataRowView)cmb_Temp.SelectedItem;//dataGridView1.CurrentCell.Value = cmb_Temp.SelectedValue.ToString(); dataGridView1.CurrentCell.Value = myrowview[2].ToString();//选取的文本 dataGridView1.CurrentCell.Tag = cmb_Temp.SelectedValue; //选取的编码// MessageBox.Show("text:" + cmb_Temp.SelectedText + "-item:" +cmb_Temp.SelectedItem.ToString() + "-value:" + cmb_Temp.SelectedValue.ToString()+"-index:"+cmb_Temp.SelectedIndex.ToString());// DataRowView myrowview = (DataRowView)cmb_Temp.SelectedItem;// MessageBox.Show(myrowview[0].ToString()+"--"+myrowview[1].ToString()+"--"+myrowview[2].ToString()); //获得对应的value和text}}private void dataGridView1_CurrentCellChanged_1(object sender, EventArgs e) {// 当用户移动到性别这一列时单元格显示下拉列表框try{if (dataGridView1.CurrentCell.ColumnIndex == 3){Rectangle rect =dataGridView1.GetCellDisplayRectangle(dataGridView1.CurrentCell.ColumnIndex, dataGridView1.CurrentCell.RowIndex, false);string sexValue = dataGridView1.CurrentCell.Value.ToString();//MessageBox.Show(sexValue);cmb_Temp.Text = sexValue;cmb_Temp.Left = rect.Left;cmb_Temp.Top = rect.Top;cmb_Temp.Width = rect.Width;cmb_Temp.Height = rect.Height;cmb_Temp.Visible = true;}else{cmb_Temp.Visible = false;}}catch{}}private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e){if (e.ColumnIndex == 0){DataGridView dgv = sender as DataGridView;if (dgv.Rows[e.RowIndex].Cells[1].Value != null){string id = dgv.Rows[e.RowIndex].Cells[0].Value.ToString();string user_id = dgv.Rows[e.RowIndex].Cells[1].Value.ToString();string user_password=dgv.Rows[e.RowIndex].Cells[2].Value.ToString();string user_class = dgv.Rows[e.RowIndex].Cells[3].Value.ToString();string user_name = dgv.Rows[e.RowIndex].Cells[4].Value.ToString();string user_sex = dgv.Rows[e.RowIndex].Cells[5].Value.ToString();string outUserid,outUserpassword,outUserclass,outUsername,outUsersex;DialogResult myresult;this.ShowDialogForm(id, user_id, user_password, user_class,user_name, user_sex,out outUserid, out outUserpassword, out outUserclass, out outUsername, out outUsersex, out myresult);if (myresult==DialogResult.OK){dgv.Rows[e.RowIndex].Cells[1].Value = outUserid;dgv.Rows[e.RowIndex].Cells[2].Value = outUserpassword;dgv.Rows[e.RowIndex].Cells[3].Value = outUserclass;dgv.Rows[e.RowIndex].Cells[4].Value = outUsername;dgv.Rows[e.RowIndex].Cells[5].Value = outUsersex;}}}}private void ShowDialogForm(string id, string user_id, string user_password, string user_class, string user_name, string user_sex,out string outUserid, out string outUserpassword, out string outUserclass, out string outUsername, out string outUsersex, out DialogResult myresult){dialog2 frm = new dialog2();//读取输入参数,显示在子窗口中frm.Controls["ID_TB"].Text = id;frm.Controls["USER_ID_TB"].Text = user_id;frm.Controls["USER_PWD_TB"].Text = user_password;frm.Controls["USER_CLASS_TB"].Text = user_class;// ER_CLASS_CB.SelectedValue = 2;frm.Controls["USER_NAME_TB"].Text = user_name;frm.Controls["USER_SEX_TB"].Text = user_sex;frm.ShowDialog(); //显示子窗口//给输出参数赋值默认值outUserid = user_id;outUserpassword = user_password;outUserclass = user_class;outUsername = user_name;outUsersex = user_sex;//判断是否进行修改数据myresult = frm.DialogResult;if(myresult==DialogResult.OK){//outUserid= frm.Controls["ID_TB"].Text;outUserid= frm.Controls["USER_ID_TB"].Text ;outUserpassword= frm.Controls["USER_PWD_TB"].Text ; outUserclass= frm.Controls["USER_CLASS_CB"].Text ; outUsername= frm.Controls["USER_NAME_TB"].Text ;outUsersex= frm.Controls["USER_SEX_TB"].Text;MessageBox.Show("修改了数据");}else{MessageBox.Show("没有修改数据!!");}frm.Dispose();}int selectrowindex = -1;private void button2_Click(object sender, EventArgs e) {if(selectrowindex<0){MessageBox.Show("请先选择一条记录数据!!");return;}//采用弹出窗口方式,进行数据修改DataGridView dgv = dataGridView1;if (dgv.Rows[selectrowindex].Cells[1].Value != null){//输入参数string id = dgv.Rows[selectrowindex].Cells[0].Value.ToString();string user_id =dgv.Rows[selectrowindex].Cells[1].Value.ToString();string user_password =dgv.Rows[selectrowindex].Cells[2].Value.ToString();string user_class =dgv.Rows[selectrowindex].Cells[3].Value.ToString();string user_name =dgv.Rows[selectrowindex].Cells[4].Value.ToString();string user_sex =dgv.Rows[selectrowindex].Cells[5].Value.ToString();string outUserid, outUserpassword, outUserclass, outUsername, outUsersex; //输出参数DialogResult myresult; //返回弹出窗口关闭状态this.ShowDialogForm(id, user_id, user_password, user_class,user_name, user_sex,out outUserid, out outUserpassword, out outUserclass, out outUsername, out outUsersex, out myresult);//如果修改了数据,把当前datagridview内容的对应值进行修改if (myresult == DialogResult.OK){dgv.Rows[selectrowindex].Cells[1].Value = outUserid;dgv.Rows[selectrowindex].Cells[2].Value = outUserpassword; dgv.Rows[selectrowindex].Cells[3].Value = outUserclass;dgv.Rows[selectrowindex].Cells[4].Value = outUsername;dgv.Rows[selectrowindex].Cells[5].Value = outUsersex;}}}private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e){selectrowindex = e.RowIndex; //获取当前选择的行坐标}//添加记录private void button1_Click(object sender, EventArgs e){//采用弹出窗口方式,进行数据修改DataGridView dgv = dataGridView1;//输入参数string id = "-1";string user_id =null;string user_password = null;string user_class = null;string user_name = null;string user_sex = null;string outUserid, outUserpassword, outUserclass, outUsername, outUsersex; //输出参数DialogResult myresult; //返回弹出窗口关闭状态this.ShowDialogForm(id, user_id, user_password, user_class, user_name, user_sex,out outUserid, out outUserpassword, out outUserclass, out outUsername, out outUsersex, out myresult);//如果添加了数据,把当前datagridview内容的对应值进行修改if (myresult == DialogResult.OK){//添加行数据((DataTable)dataGridView1.DataSource).Rows.Add(1, outUserid, outUserpassword,outUserclass,outUsername,outUsersex);//dataGridView1是不能直接添加行的,只能在他的数据源里添,他会自动绑定}}//删除一条记录private void button3_Click(object sender, EventArgs e){int myid =int.Parse(dataGridView1.Rows[selectrowindex].Cells[0].Value.ToString());string mysql = "delete from user_tb1 where ID=" + myid.ToString();DataOperate dataoperate = new DataOperate();dataoperate.getCom(mysql);MessageBox.Show("删除数据成功");//加载数据mysql = "select * from sql3 ";DataSet ds = dataoperate.getDs(mysql, "sql3");dataGridView1.DataSource = ds.Tables[0];/*//获取总页码 SELECT Count(id) AS number1 FROM user_tb1;mysql = "SELECT Count(id) AS number1 FROM user_tb1 ";DataSet ds = dataoperate.getDs(mysql, "user_tb1");int indexsum = int.Parse(ds.Tables[0].Rows[0][0].ToString());if (indexsum % pagesize == 0)label5.Text = (indexsum / pagesize).ToString();elselabel5.Text = (indexsum / pagesize + 1).ToString();pagesum = int.Parse(label5.Text);//显示当前页面try{button5_Click(sender, e); //刷新当前页面}catch (Exception){throw;}*/}//}}弹出窗口代码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 monClass;namespace WDZ{public partial class dialog2 : Form{public dialog2(){InitializeComponent();}private void dialog2_Load(object sender, EventArgs e){string mysql = "select * from user_class order by id";bindcombox(USER_CLASS_CB, mysql, "user_class");USER_CLASS_CB.SelectedIndex=USER_CLASS_CB.FindString(USER_CLASS_TB.Text,-1); //**非常重要,利用string查找到对应的index,然后就可以显示了,或者取value}// 填充Combox控件private void bindcombox(ComboBox mycombox,string mysql,string tbname){DataTable mydt = new DataTable();DataOperate dataoperate = new DataOperate();DataSet ds = dataoperate.getDs(mysql, tbname);mydt = ds.Tables[0];mycombox.ValueMember =mydt.Columns[1].ColumnName; //设置隐含的形式显示数值,起对应一定的名称//cmb_Temp.ValueMember = "user_class";mycombox.DisplayMember = mydt.Columns[2].ColumnName;mycombox.DataSource = mydt;mycombox.DropDownStyle = ComboBoxStyle.DropDownList; //只能选择,不能写入//cmb_Temp.DropDownStyle =ComboBoxStyle.DropDown; //可以写入// cmb_Temp.DropDownStyle = ComboBoxStyle.Simple;}private void button1_Click(object sender, EventArgs e){//提交数据库操作,。