7

にデータベース テーブルを表示しますdatagridviewdatagridviewSQLのデータベースからレコードを適切に保存できます。

ここで、いくつかのレコードを変更および変更し、これらの変更をデータベースに保存したいと考えています。これどうやってするの?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 を使用して変更をデータベースにプッシュすることです。これにより、変更が行われるたびにローカル データセット全体を更新する必要がなくなります。DataAdapter を使用したデータ ソースの更新 (ADO.NET) を参照してください。

基本的なシーケンスは次のとおりです。

  1. データ ソースに接続し、DataAdapter.Fill() を使用してデータ テーブルに入力します
  2. ローカル DataTable のデータをデータベースにプッシュする方法を定義する UpdateCommand または InsertCommand を定義します
  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この画像が、updateedit、のヒントになれば幸いですdelete

ここに画像の説明を入力

于 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 に答える