我的上一个问题已经结束,因为它不清楚,所以我会再试一次,因为我真的需要帮助......
我正在使用带有OLEDB连接的Visual Studio 2010。现在我正在开发一个Windows窗体。我注意到 datagridview 允许您进行编辑/添加/删除模式,因此我希望能够使用它。
我想要做的是使用cellcontentchanged事件来编辑我的数据库。当我更改内容并离开时,它会问我是否要编辑此单元格。如果我说是,则该单元格将被更改。
我确保ReadOnly = false
和enabled = true
。以前,从我读到的内容来看,我会做这样的事情:
adapter.Update(dataset);
或类似的东西。但是,这并不能保存数据库的更改。我也不确定如何以编程方式编辑。我也不确定我是否应该使用OLEDB更新命令。如果有任何不清楚的地方,请回复,我很乐意澄清。谢谢!
编辑:抱歉,如果它仍然很难理解!
这里有一些代码......
private void dgv_DataLookup_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
DialogResult dr;
dr = MessageBox.Show("Are you sure you want to edit this field?", "Edit Cell", MessageBoxButtons.YesNo);
if (dr == DialogResult.Yes)
{
//update the table in my database
}
}
这还不是很多,但希望你能尝试看看我想做什么
再次编辑:这是此部分的所有相关代码(这是显示我要编辑的datagridview的代码)
OleDbConnection cs;
OleDbDataAdapter da = new OleDbDataAdapter();
DataSet dsB = new DataSet();
//If clicked search button
else if (combo_View.Text == "Orders")
{
da.SelectCommand = new OleDbCommand("SELECT * FROM TestQuery WHERE (VendorName = @VendorName OR @VendorName = '') AND (CustomerName = @CustomerName OR @CustomerName = '') AND ((@From IS NULL AND @To IS NULL) OR orderDate BETWEEN @From AND @To) AND (ItemNum = @ItemNum OR @ItemNum = '') AND (PO = @PO OR @PO = '') ORDER BY CustomerName", cs);
da.SelectCommand.Parameters.Add("@VendorName", OleDbType.VarChar).Value = combo_VendorView.Text.ToString();
da.SelectCommand.Parameters.Add("@CustomerName", OleDbType.VarChar).Value = combo_CustomerView.Text.ToString();
if (!chk_viewAllDates.Checked)
{
da.SelectCommand.Parameters.Add("@From", OleDbType.Date).Value = "#" + tp_viewFrom.Value.Date.ToString("M/d/yyyy") + "#";
da.SelectCommand.Parameters.Add("@To", OleDbType.Date).Value = "#" + tp_viewTo.Value.Date.ToString("M/d/yyyy") + "#";
}
else
{
da.SelectCommand.Parameters.Add("@From", OleDbType.Date).Value = DBNull.Value;
da.SelectCommand.Parameters.Add("@To", OleDbType.Date).Value = DBNull.Value;
}
da.SelectCommand.Parameters.Add("@PO", OleDbType.VarChar).Value = txt_POLookup.Text.ToString();
da.SelectCommand.Parameters.Add("@ItemNum", OleDbType.VarChar).Value = combo_ItemNumLookup.Text.ToString();
dsB.Clear();
da.Fill(dsB);
dgv_DataLookup.DataSource = dsB.Tables[0];
}
如果您需要更多代码,请告诉我们。任何帮助表示赞赏:)
答案 0 :(得分:0)
我也不确定你在这里问什么,但我会做一些假设你只是问如何将编辑后的数据保存回数据库。我不会使用CellValueChanged事件。通常,您只需让用户编辑网格中的数据,然后让他们单击保存按钮或将数据保存在表单关闭中。
void Save()
{
OleDbConnection con=new OleDbConnection("Put your connect string here");
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM TestQuery", con);
OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
DataTable tbl = dsB.Tables[0];
da.Update(tbl);
tbl.AcceptChanges();
}
您可能希望重用已创建的某些对象(如连接),但这是基础知识。
答案 1 :(得分:0)
我自己解决了这个问题。只需使用owningcolumn owningrow来获取我需要的值。感谢