2017-07-11 2 views
0

Nach einigen Stunden der Forschung habe ich noch keine Ahnung, wie ich das programmieren sollte. Ich möchte meine Datenbank aktualisieren, wenn der Benutzer einige spezifische Spalten meines datagridview füllt und dann auf den Knopf klickt.Aktualisieren Sie die Datenbank, wenn Datagridview gefüllt ist und klicken Sie auf eine Schaltfläche

Ich habe einige Bindung gesehen, einige datatable und einige dataset. Ich habe noch nie von databinding gehört und kann nicht alle meinen Code ändern, um die databinding Schließung zu respektieren. Ich habe einige Dinge über datatable gesehen, aber es ist das gleiche wie dataset richtig? (Datensatz ist nur eine Sammlung?). Und ich verwende derzeit dataset, aber alles, was ich teste, funktioniert nicht.

Hier ist mein Code in eigentlichen Test:

public partial class Repair : Form 
{ 
    public Repair() 
    { 
     InitializeComponent(); 

     SqlConnection maConnexion = new SqlConnection("Server= localhost; Database= Seica_Takaya;Integrated Security = SSPI; "); 
     maConnexion.Open(); 
     SqlCommand command = maConnexion.CreateCommand(); 

     if (Program.UserType == "admin") 
     { 
      command.CommandText = "SELECT * FROM FailOnly"; 
     } 
     else 
     { 
      command.CommandText = "SELECT * FROM FailOnly WHERE ReportingOperator IS NULL"; 
     } 

     SqlDataAdapter sda = new SqlDataAdapter(command); 
     DataSet ds = new DataSet(); 
     sda.Fill(ds); 
     dataGridView1.DataSource = ds.Tables[0]; 
     maConnexion.Close(); 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     this.Hide(); 

     Main ff = new Main(); 
     ff.Show(); 
    } 

    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     SqlConnection maConnexion = new SqlConnection("Server= localhost; Database= Seica_Takaya;Integrated Security = SSPI; "); 
     maConnexion.Open(); 
     string Var1 = textBox1.Text; 
     SqlCommand command = maConnexion.CreateCommand(); 

     if (Program.UserType == "admin") 
     { 
      if (textBox1.Text != "") 
      { 
       command.Parameters.AddWithValue("@BoardName", Var1 + "%"); 
       command.Parameters.AddWithValue("@Machine", Var1 + "%"); 
       command.Parameters.AddWithValue("@SerialNum", Var1 + "%"); 
       command.Parameters.AddWithValue("@FComponent", Var1 + "%"); 
       command.CommandText = "SELECT * FROM FailOnly WHERE BoardName LIKE @BoardName OR Machine LIKE @Machine OR SerialNum LIKE @SerialNum OR FComponent LIKE @FComponent"; 
      } 
     } 
     else 
     { 
      if (textBox1.Text != "") 
      { 
       command.Parameters.AddWithValue("@BoardName", Var1 + "%"); 
       command.Parameters.AddWithValue("@Machine", Var1 + "%"); 
       command.Parameters.AddWithValue("@SerialNum", Var1 + "%"); 
       command.Parameters.AddWithValue("@FComponent", Var1 + "%"); 
       command.CommandText = "SELECT * FROM FailOnly WHERE (BoardName LIKE @BoardName OR Machine LIKE @Machine OR SerialNum LIKE @SerialNum OR FComponent LIKE @FComponent) AND ReportingOperator IS NULL "; 
      } 
     } 

     SqlDataAdapter sda = new SqlDataAdapter(command); 
     DataSet ds = new DataSet(); 
     sda.Fill(ds); 
     dataGridView1.DataSource = ds.Tables[0]; 
     maConnexion.Close(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     int i = 0; 
     int var; 

     var = dataGridView1.Rows.Count; 

     for (i = 0; i < var; i++) 
     { 
      SqlConnection maConnexion = new SqlConnection("Server= localhost; Database= Seica_Takaya;Integrated Security = SSPI; "); 
      maConnexion.Open(); 
      SqlCommand command = maConnexion.CreateCommand(); 
      command = new SqlCommand("update FailOnly, FailAndPass set [email protected], [email protected], RepairingTime = @RT, [email protected]", maConnexion); 
      command.Parameters.AddWithValue("@Fault", dataGridView1.Columns[15]); 
      command.Parameters.AddWithValue("@RD", dataGridView1.Columns[16]); 
      command.Parameters.AddWithValue("@RT", dataGridView1.Columns[17]); 
      command.Parameters.AddWithValue("@RO", dataGridView1.Columns[18]); 

      command.ExecuteNonQuery(); 
      maConnexion.Close(); 
     } 
    } 
} 

Thank you!

Bearbeiten: Arbeiten dank Krishna! Ein großes Dankeschön an ihn für die Stunde mit mir auf meinem Code vorbei!

+0

was auch immer Sie in Schleife schrieb nicht? Hast du einen Fehler? – Krishna

+0

Ich habe eine System.ArgumentException: 'Es gibt keine Verknüpfung zum Objekttyp System.Windows.Forms.DataGridViewTextBoxColumn und zu einem anderen Verwaltungsobjekt':/ –

+0

Ihre Update-Anweisung verwendet zwei Tabellen? Was bedeutet diese Aussage? 'update FailOnly, FailAndPass' – Krishna

Antwort

0

Sie durchlaufen Zeilen und prüfen Spalten, ändern das Klickereignis der Schaltfläche wie folgt.

Änderung der Datenbindung wie unter

public Repair() 
{ 
    InitializeComponent(); 

    SqlConnection maConnexion = new SqlConnection("Server= localhost; Database= Seica_Takaya;Integrated Security = SSPI; "); 
    maConnexion.Open(); 
    SqlCommand command = maConnexion.CreateCommand(); 

    if (Program.UserType == "admin") 
    { 
     command.CommandText = "SELECT * FROM FailOnly"; 
    } 
    else 
    { 
     command.CommandText = "SELECT * FROM FailOnly WHERE ReportingOperator IS NULL"; 
    } 

    SqlDataAdapter sda = new SqlDataAdapter(command); 
    DataTable dt = new DataTable(); 
    sda.Fill(dt); 
    DataColumn dcIsDirty = new DataColumn("IsDirty", typeof(bool)); 
    dcIsDirty.DefaultValue = false; 
    dt.Columns.Add(dcIsDirty); 
    dataGridView1.DataSource = dt; 
    maConnexion.Close(); 
    dataGridView1.Columns[19].DefaultCellStyle.NullValue = false; 
} 

Implement CellEndEdit

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
{ 
    if (dataGridView1.IsCurrentCellDirty) 
    { 
     dataGridView1.Rows[e.RowIndex].Cells[dataGridView1.ColumnCount - 1].Value = true; 
    } 
} 

jetzt tun Knopf Klick ändert

private void button1_Click(object sender, EventArgs e) 
{ 
    foreach(DataGridViewRow row in dataGridView1.Rows) 
    { 
     if(row.Cells[19].Value !== null && (bool)row.Cells[19].Value)//update only changed data 
     { 
      SqlConnection maConnexion = new SqlConnection("Server= localhost; Database= Seica_Takaya;Integrated Security = SSPI; "); 
      maConnexion.Open(); 
      SqlCommand command = maConnexion.CreateCommand(); 
      command = new SqlCommand("update FailOnly, FailAndPass set [email protected], [email protected], RepairingTime = @RT, [email protected]", maConnexion); 
      command.Parameters.AddWithValue("@Fault",row.Cells[15].Value != null ? row.Cells[15].Value : DBNull.Value); 
      command.Parameters.AddWithValue("@RD", row.Cells[16].Value != null ? row.Cells[16].Value : DBNull.Value); 
      command.Parameters.AddWithValue("@RT", row.Cells[17].Value != null ? row.Cells[17].Value : DBNull.Value); 
      command.Parameters.AddWithValue("@RO", row.Cells[18].Value != null ? row.Cells[18].Value : DBNull.Value); 
      command.ExecuteNonQuery(); 
      maConnexion.Close(); 
     } 
    } 
} 
+0

Ich habe einige Fehler. Erstens existiert Zellen nicht in einer Reihe. Und zweitens, ich habe immer noch die Ausnahme auf "executeNonQuery()":/ –

+0

Sagte Ihnen, dass die Abfrage falsch ist, können Sie 2 Tabellen in einer Anweisung nicht aktualisieren – Krishna

+0

Datagridview Zeile Zellen erneut überprüfen lassen – Krishna

Verwandte Themen