DataGridView直接修改数据并且更新数据库

时间:2021-10-14 07:31:08

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();
}
}