DataGridView编辑单元格

时间:2011-07-19 12:35:06

标签: c# visual-studio-2010 ado.net datagridview

我的上一个问题已经结束,因为它不清楚,所以我会再试一次,因为我真的需要帮助......

我正在使用带有OLEDB连接的Visual Studio 2010。现在我正在开发一个Windows窗体。我注意到 datagridview 允许您进行编辑/添加/删除模式,因此我希望能够使用它。

我想要做的是使用cellcontentchanged事件来编辑我的数据库。当我更改内容并离开时,它会问我是否要编辑此单元格。如果我说是,则该单元格将被更改。

我确保ReadOnly = falseenabled = 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];

        }

如果您需要更多代码,请告诉我们。任何帮助表示赞赏:)

2 个答案:

答案 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来获取我需要的值。感谢