7

我在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,但我无法编辑已经存在的记录。编辑后单击保存按钮,它会再次显示以前的值。请帮忙。

4

5 回答 5

2

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

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

基本顺序是:

  1. 连接数据源,使用 DataAdapter.Fill() 填充数据表
  2. 定义一个 UpdateCommand 或 InsertCommand,定义如何将本地 DataTable 中的数据推送到数据库
  3. 在本地 DataTable 中添加一行
  4. 调用 DataAdapter.Update() 将更新推送到数据库。
于 2013-03-12T06:52:44.347 回答
1

只需使用 Select 命令首先检查表中是否存在记录

"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;
        }
    }

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

于 2013-03-12T07:43:56.420 回答
0

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

我希望这张图片能给你一个提示save,,,,updateeditdelete

在此处输入图像描述

于 2013-03-12T11:19:15.607 回答
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 块中写任何东西

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

于 2013-03-11T11:55:43.493 回答
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;

    }
于 2013-03-12T09:36:53.240 回答