将编辑的数据保存在行中

时间:2013-03-11 11:52:31

标签: c# winforms datagridview

我在datagridview中显示数据库表。我可以将记录从datagridview正确保存到sql中的数据库。

现在,我想修改和更改一些记录并将这些更改保存在数据库中。我怎样才能做到这一点?我正在使用附加到datasource的数据集的绑定datatable

private void Form1_Load(object sender, EventArgs e)
{
    this.cPDM0020TableAdapter.Fill(this.cpdm_dataset.CPDM0020);
}

private void btnSave_Click(object sender, EventArgs e)
{
    string code = dataGridView1[0, dataGridView1.CurrentCell.RowIndex].Value.ToString().ToUpper();
    string currency_Name = dataGridView1[1, dataGridView1.CurrentCell.RowIndex].Value.ToString().ToUpper();
    string boolBase = dataGridView1[2, dataGridView1.CurrentCell.RowIndex].Value.ToString();
    string local_per_Base = dataGridView1[3, dataGridView1.CurrentCell.RowIndex].Value.ToString();
    string base_per_Local = dataGridView1[4, dataGridView1.CurrentCell.RowIndex].Value.ToString();
    string insert_sql = "INSERT INTO centraldb.dbo.CPDM0020(Code,Currency_Name,Base,Local_per_Base,Base_per_Local)VAL‌​UES('" + 
        code + "','" + 
        currency_Name + "','" + 
        boolBase + "','" + 
        local_per_Base + "','" + 
        base_per_Local + "')";

    if (this.ExecuteSql(insert_sql))
    {
        MessageBox.Show("Record Inserted Successfully.");
    }
    else
    {
        MessageBox.Show("Insert Failed");
    }
}

public bool ExecuteSql(string command)
{

    SqlCommand sqlCommand = new SqlCommand(command, connection);
    connection.Open();
    sqlCommand.ExecuteNonQuery();
    this.cPDM0020TableAdapter.Fill(this.cpdm_dataset.CPDM0020);
    dataGridView1.DataSource = cpdm_dataset.CPDM0020;
    sqlCommand.Dispose();
    connection.Close();
    return true;
}

我可以在数据库和datagridview中轻松保存新条目,但我无法编辑已存在的记录。在编辑后点击保存按钮,它会再次显示之前的值。请帮忙。

5 个答案:

答案 0 :(得分:2)

您的数据库不受您的应用控制;当数据发生变化时,它不会将某些事件发送回您的应用程序。您必须主动重新查询数据库以进行更改。

使用DataGridView的更典型方法是首先将更改应用于本地数据副本,然后使用DataAdapter将更改推送回数据库。这样可以避免在进行更改时随时刷新整个本地数据集。请参阅使用DataAdapter更新数据源(ADO.NET)。

基本顺序是:

  1. 连接到数据源,使用DataAdapter.Fill()填充数据表
  2. 定义UpdateCommand或InsertCommand,定义如何将本地DataTable中的数据推送到数据库
  3. 在本地DataTable中添加一行
  4. 调用DataAdapter.Update()将更新推送到数据库。

答案 1 :(得分:1)

您只需先使用选择命令

检查表中是否存在记录

“select * from centraldb.dbo.CPDM0020 Where Code ='”+ Code +“'”;

你可以使用这个功能:

    public bool IsExistRecord(string Query)
    {
        try
        {
            DataTable DT = new DataTable();
            SqlCommand CMD = new SqlCommand(Query, Connection);
            SqlDataAdapter DA = new SqlDataAdapter(CMD);
            DA.Fill(DT);

            if (DT.Rows.Count > 0)
                return true;
            else
                return false;

        }
        catch (Exception ex)
        {
           return false;
        }
    }

如果记录存在则执行更新查询(如果不存在)执行插入查询。

答案 2 :(得分:0)

尝试使用以下代码>

try
{
    var row = gvTransactions.CurrentRow;
    int ID= int.parse(row.Cells[0].Value.ToString());
    string abc=row.Cells[0].Value.ToString();
}
catch(exception ex)
{
}

获取此类值。

  

注意:不要在catch块中写任何东西

然后根据您的需要触发插入/更新查询。

答案 3 :(得分:0)

制作更新按钮:

private void btnUpdate_Click(object sender, EventArgs e) {
    string code = dataGridView1[0, dataGridView1.CurrentCell.RowIndex].Value.ToString().ToUpper();
    string currency_Name = dataGridView1[1, dataGridView1.CurrentCell.RowIndex].Value.ToString().ToUpper();
    string boolBase = dataGridView1[2, dataGridView1.CurrentCell.RowIndex].Value.ToString();
    string local_per_Base = dataGridView1[3, dataGridView1.CurrentCell.RowIndex].Value.ToString();
    string base_per_Local = dataGridView1[4, dataGridView1.CurrentCell.RowIndex].Value.ToString();
    string select_qry = "Select * from centraldb.dbo.CPDM0020 Where Code = '" + Code + "'";
   if(IsExistRecord(select_qry))
    {
    string update_qry = Update centraldb.dbo.CPDM0020 set Code,Currency_Name='" + currency_Name + "',Base='" + boolBase + "',Local_per_Base,Base_per_Local='" + base_per_Local + "' where code='" + code +"'";
    if (this.ExecuteSql(update_qry)) {
        MessageBox.Show("Record Updated Successfully.");
    } else {

        MessageBox.Show("Update Failed");
    }
    }
}
    //code taken from  Mohammad abumazen 
 public bool IsExistRecord(string Query)
 {
        DataTable DT = new DataTable();
        SqlCommand CMD = new SqlCommand(Query, Connection);
        SqlDataAdapter DA = new SqlDataAdapter(CMD);
        DA.Fill(DT);

        if (DT.Rows.Count > 0)
            return true;
        else
            return false;

    }

答案 4 :(得分:0)

由于您使用的是dataSet,因此您可以在tableApdater中创建命令。 以下是关于Creating a Data Access Layer的文章,因为您在winforms,您可以在项目中应用该文章。

我希望此图片会为您提供saveupdateeditdelete的提示。

enter image description here