2016-07-28 14 views
0

Ich erhalte die Fehlermeldung „Eingabezeichenfolge war nicht in einem korrekten Format“ auf der Linie Empfang:Warum bin ich „Input-String nicht in der richtigen Format“, während retreiving Gridview Zeilenindex

int index = Convert.ToInt32(e.CommandArgument); 

Mein Ziel ist es, Erhalte die ID (sowohl Buchstaben als auch Zahlen) aus meiner Gridview (Zelle 1 der ausgewählten Zeile), um die Datensätze in dem DB zu verarbeiten, der dieser ID zugeordnet ist.

Die meisten der Seiten, die ich gefunden habe, sagte, den obigen Code zu verwenden, um die Zeilennummer für Gridview zu finden.

Meine aspx Seite:

<asp:gridview ID="gridview1" runat="server" DataKeyNames="ID" AutoGenerateColumns="false" OnRowCommand="gridview1_RowCommand"> 
     <columns> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <asp:LinkButton ID="btn_select" runat="server" Text="Select" CommandName="Select" /> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:BoundField HeaderText="Record_ID" DataField="ID" /> 
      <asp:BoundField HeaderText="Record_Date" DataField="Date" /> 
     </Columns> 
    </asp:gridview> 

My-Code Behind:

SqlCommand cmd = new SqlCommand(); 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     //code stuff 
     final(); 
    } 
    protected void final() 
    { 
     //code stuff for populating the gridview. Gridview populates as expected. 
    } 
    protected void gridview1_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 
     if (e.CommandName == "Select") 
     { 
      int index = Convert.ToInt32(e.CommandArgument);//where I receive the error. 
      string id = gridview1.Rows[index].Cells[1].Text; 
      using (SqlConnection connection string) 
      { 
       try 
       { 
        cmd = new SqlCommand("DBSP", connection); 
        cmd.CommandType = CommandType.StoredProcedure; 
        cmd.Parameters.Add("@id", SqlDbType.Char).Value = id; 

        connection.Open(); 
        cmd.ExecuteNonQuery(); 
        connection.Close(); 

        final(); 
       } 
       catch (Exception ex) 
       { 
        //code stuff 
       } 
      } 
     } 
    } 

Ein paar andere Dinge, die ich versucht habe, sind von:

Accessing GridView Cells Value

How to get cell value in GridView (WITHOUT using cell index)

Get the cell value of a GridView row

Getting value from a Gridview cell

sowie andere.

+0

Wissen Sie, was der Wert von 'e.CommandArgument' ist? Klingt so, als ob es einen oder mehrere Buchstaben enthalten könnte. Wenn das der Fall ist, müssen Sie eine Regex oder etwas verwenden, um die Ziffern zu isolieren. –

+0

@EdPlunkett, ja, das erste Zeichen der ID ist ein Alpha-Zeichen. – user3549282

Antwort

1

Sie sollten den ID-Wert auf die CommandArgument der Linkbutton zuweisen:

<asp:LinkButton ... CommandName="Select" CommandArgument='<%# Eval("ID") %>' /> 

Die folgende Zeile würden Sie den ID-Wert, ohne den Text der Zelle erhalten mit:

string ID = e.CommandArgument.ToString(); 


Alternativ können Sie die Datakeys verwenden, um die ID-Wert abzurufen:

protected void gridview1_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "Select") 
    { 
     GridViewRow row = (e.CommandSource as Control).NamingContainer as GridViewRow; 
     string ID = gridView1.DataKeys[row.RowIndex].Values["ID"].ToString(); 
     ... 
    } 
} 
+0

Danke, funktioniert super! Ich musste das int in string ändern, das (int) löschen und .ToString() am Ende hinzufügen – user3549282

+0

OK. Also ist Ihr ID-Feld eine Zeichenfolge. Ich werde meine Antwort anpassen. – ConnorsFan