DataGridView單元格進入編輯模式的方法:
雙擊或者f2:
EditCellOnEnter 屬性設為True,對DataGridView進行配置,當用戶移動到該單元格后,該單元格可立即切換到編輯模式。
ESC取消編輯,如果將EditCellEnter屬性設置為True,則單元格仍將處於編輯模式,但是所有更改都將被放棄,要提交更改,用戶只須移動到新的單元格,或者叫焦點(focus)切換到其他控件。
為了防止單元格被編輯,用戶可以設置
DataGridViewCell、DataGridViewColumn·1DataGridViewRow或DataGridView的ReadOnly屬性(取決於用戶要限定更改的內容)
要在DataGridView控件中修改數據,可通過CellValueChanged事件來完成
using System; using System.Collections.Generic; using System.ComponentModel; 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 有多種重載方式,也可以直接寫datatable dataGridView1.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(); } } } }