1、 两个属性设置:
第一个:设置自动创建列,默认为True
DataGridView1. AutoGenerateColumns = True;
虽然默认为True,但写下去总是好的!!!
第二个:鼠标单击编辑,默认双击
DataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;
2、 防止单元格被编辑:
DataGridViewCell:限制单元格
DataGridViewColumn:限制列
DataGridViewRow:限制行
DataGridViewReadOnly:限制整个DataGridView控件
关键代码如下:
dataGridView1.ReadOnly = true;//整个表格只读 dataGridView1.Columns[1].ReadOnly = true;//列只读 dataGridView1.Rows[0].ReadOnly = true;//行只读 dataGridView1[3,3].ReadOnly = true;//单元格只读
获取数据
string strcolumn = dataGridView1.Columns[e.ColumnIndex].HeaderText;//获取列标题 string strrow = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();//获取焦点触发行的第一个值 string value = dataGridView1.CurrentCell.Value.ToString();//获取当前点击的活动单元格的值
还有一种限制编辑的方式,EditMode枚举下的EditProgrammatically的属性:
dataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically; //仅在调用 System.Windows.Forms.DataGridView.BeginEdit(System.Boolean) 方法时开始编辑
此属性需要调用一个CellBeginEdit事件,编辑条件写在方法中。
private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) { // dataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically; //在点击单元格时,触发此事件,进行有条件的编辑 }
3、可通过CellValueChanged事件来实现更新数据库的数据数据链接
private SqlConnection connection() { string strconn = "server = XQ-20160210KQLE\SA;uid = sa;pwd = 123456;database = JYXinXi"; SqlConnection conn = new SqlConnection(strconn); return conn; }
DataGridView显示数据
private void GetDataGridView() { try { string strda = "select * from FilTer"; SqlConnection conn = connection(); conn.Open(); DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(strda, conn); da.Fill(ds, "显示数据"); conn.Close(); dataGridView1.AutoGenerateColumns = true;//自动创建列 dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;//单击单元格编辑 dataGridView1.DataSource = ds.Tables[0]; } catch (Exception ee) { MessageBox.Show(ee.Message.ToString()); } }
更新数据库
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) { SqlConnection conn = connection(); try { string strcolumn = dataGridView1.Columns[e.ColumnIndex].HeaderText;//获取列标题 string strrow = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();//获取焦点触发行的第一个值 string value = dataGridView1.CurrentCell.Value.ToString();//获取当前点击的活动单元格的值 string strcomm = "update FilTer set " + strcolumn + "='" + value + "'where id = " + strrow; //update FilTer set 列名 = value where id = 3 conn.Open(); SqlCommand comm = new SqlCommand(strcomm, conn); comm.ExecuteNonQuery(); } catch (Exception ee) { MessageBox.Show(ee.Message.ToString()); } finally { conn.Close(); } }