2016-10-07 4 views
-1

Ich habe eine Gridview, die aus einer SQL-Tabelle auffüllt und zwei Spalten zeigt, eine kommt aus einer Ganzzahl-Datenspalte, die andere aus einer Nvarchar. Gridview hat auch eine Checkbox-SpalteC# Kann nicht von String in int konvertieren

Die Gridview wird korrekt ausgefüllt, und nachdem eine Teilmenge von Zeilen ausgewählt ist (über Checkbox-Spalte) möchte ich die ausgewählten Zeilen in eine andere SQL-Tabelle einfügen. Beim Auffüllen der Variablen für die SQL-Anweisung bekomme ich jedoch den Fehler "Kann nicht von String in int konvertieren" für den Wert, der von einem int gefüllt wird, um damit zu beginnen.

Ich habe versucht, zu konvertieren zu schreiben und für diese Aussage analysieren, aber immer noch den Fehler bekommen:

cmd.Parameters.AddWithValue("@PracticeArea", int.Parse(row.Cells["Id"].Value)); 

cmd.Parameters.AddWithValue("@PracticeArea", Convert.ToInt32(row.Cells["Id"].Value)); 

cmd.Parameters.AddWithValue("@PracticeArea", Convert.ToInt32(row.Cells["Id"].Text)); 

Alle zeigen noch den Fehler auf dem [ „id“] Wert.

Irgendwelche Gedanken?

Beispiel der Daten, die mit dem Grid bevölkert wird, ist:

PracticeID PracticeName 
1 General Surgical Pathology 
2 General Pathology/Basic Science 
4 Cardiovascular 
6 Cytopathology-GYN 
7 Cytopathology-nonGYN 

Voll Schaltfläche Befehl lautet:

protected void Bulk_Insert(object sender, EventArgs e) 
{ 
    foreach (GridViewRow row in GridView1.Rows) 
    { 
     if ((row.FindControl("CheckBox1") as CheckBox).Checked) 
     { 
      string connectionString = WebConfigurationManager.ConnectionStrings["CS1"].ConnectionString; 
      SqlConnection con = new SqlConnection(connectionString); 
      { 
       using (SqlCommand cmd = new SqlCommand("INSERT INTO ReviewerPractice VALUES(@Reviewer, @PracticeArea)", con)) 
       { 
        cmd.Parameters.AddWithValue("@Reviewer", ReviewerName.Text); 
        cmd.Parameters.AddWithValue("@PracticeArea", Convert.ToInt32(row.Cells["Id"].Value)); 
        con.Open(); 
        cmd.ExecuteNonQuery(); 
        con.Close(); 
       } 
      } 
     } 
    } 
} 

Vollgridview-Steuerelement ist:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"> 
<Columns> 
<asp:TemplateField> 
    <ItemTemplate> 
     <asp:CheckBox ID="CheckBox1" runat="server" /> 
    </ItemTemplate> 
</asp:TemplateField> 
<asp:BoundField DataField="Id" HeaderText="Id" ItemStyle-Width="30" /> 
<asp:BoundField DataField="PracticeName" HeaderText="PracticeName" ItemStyle-Width="150" /> 
</Columns> 
</asp:GridView> 
<br /> 
<asp:Button ID="Button1" Text="Add Practice Areas" OnClick="Bulk_Insert" runat="server" /> 

Hope this Antworten (einige?) der Fragen aus allen bisherigen Kommentaren.

+1

Könnten Sie debug und sehen, welcher Wert für row.Cells ["Id"] ist. Wert? –

+0

@GiladGreen führenden und nachfolgenden Leerraum wird vom Parser behandelt. – juharr

+1

Ich habe Angst "Id" ist nicht der Wert, der diesen Fehler wirft. Haben Sie in Ihrer Zieldatenbanktabelle eine andere Integer-Spalte? – Fabio

Antwort

2

Das Problem ist, dass row.Cells[] ist ein Array, so dass Sie es so verwenden müssen:

row.Cells[3].Text 

Und es ist besser, die Parameter für die SQL wie folgt zu verwenden:

cmd.Parameters.Add("@PracticeArea", SqlDbType.Int).Value = Convert.ToInt32(row.Cells[index].Text; 
+0

Ich kann keines der von Ihnen zur Verfügung gestellten Formate verwenden. Beide geben immer noch einen Fehler aus. Die einzige Änderung ist, dass es jetzt ein "System.ArgumentOutOfRangeException" -Fehler ist. –

+0

Das bedeutet, dass Sie versuchen, auf eine Zelle zuzugreifen, die nicht im Array der Zellen existiert.Wenn zum Beispiel eine GridView 4 Spalten (0, 1, 2, 3) hat und Sie versuchen, auf die 5. Zeile zuzugreifen. Zellen [4] .Text' Sie werden diesen Fehler bekommen. – VDWWD

+0

Den letzten Kommentar abbrechen, mit einigen Optimierungen funktioniert es jetzt. –

Verwandte Themen