Входная строка была в неправильном формате. Visual Studio 2017

#c# #asp.net

#c# #asp.net

Вопрос:

 protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Accept")
    {
        int rowIndex = Convert.ToInt32(e.CommandArgument);
        GridViewRow row = GridView1.Rows[rowIndex];
        row.Cells[1].Text = "ACCEPTED";
        string msg = "ACCEPTED";
        Session["c_email"] = row.Cells[4].Text;
        string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
        SqlConnection con = new SqlConnection(constr);
        con.Open();
        string insert = "insert into Status values(@email,@c_email,@status)";
        SqlCommand cmd = new SqlCommand(insert, con);

        cmd.Parameters.AddWithValue("@c_email", Session["c_email"].ToString());
        cmd.Parameters.AddWithValue("@email", Session["mechanic"].ToString());
        cmd.Parameters.AddWithValue("@status", msg.ToString());
        cmd.ExecuteNonQuery();
        Label1.Text = "You need to reach the customer within one hour and provide the needful service.";
        con.Close();
    }
  

Я пытался устранить эту ошибку, но не смог этого сделать. Строка не в правильном формате, появляется эта ошибка. Но каким может быть решение? Я попробовал несколько способов, таких как «int.Parse», «Int32.Попробуйте проанализировать «, а также я добавил e.CommandArgument.toString()
Но все было просто бесполезно. Пожалуйста, помогите мне с этой ошибкой.
С нетерпением благодарю вас.

Это ошибка

.aspx-код:

 <asp:GridView ID="GridView1" runat="server"  
     OnRowCommand="GridView1_RowCommand"  
     CssClass="table-bordered table-hover table-responsive table"  
     BackColor="White" BorderColor="White" CellPadding="3"  
     DataSourceID="SqlDataSource1" AutoGenerateColumns="False"> 
    <AlternatingRowStyle BackColor="#CCCCCC" />
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button ID="btnpreview" runat="server" Text="Accept" CommandName="Accept" />
                <asp:Button ID="btnselect" runat="server" Text="Reject" CommandName="Reject" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField HeaderText="Status" />
        <asp:BoundField DataField="first_name" HeaderText="First name" SortExpression="first_name" />
        <asp:BoundField DataField="last_name" HeaderText="Last name" SortExpression="last_name" />
  

Комментарии:

1. Пожалуйста, поделитесь своим aspx-кодом также для кнопки, которая запускает команду «Принять»!

2. Очевидно, что вам нужно предоставить строку в правильном формате . Мы понятия не имеем, каково текущее значение, поэтому за пределами этого абсолютно ничего нельзя предложить.

3. Какое e.CommandArgument значение? Вероятно, она не конвертируется в int, например 3.0 или text

4. Итак, глядя на ваш aspx-код, вы не передаете никаких командных аргументов <asp:Button ID="btnpreview" runat="server" Text="Accept" CommandName="Accept" CommandArgument="?" />

5. Попробуйте использовать CommandArgument='<%# Container.DataItemIndex%>'

Ответ №1:

Измените кнопку «Принять» на-

 <asp:Button ID="btnpreview" runat="server" Text="Accept" CommandName="Accept" CommandArgument='<%# Container.DataItemIndex%>' />
  

Обратите CommandArgument='<%# Container.DataItemIndex%>' внимание на строку выше, это даст вам индекс строки.

или

Вы можете изменить свой код на-

 GridViewRow row = (GridViewRow)(((Control)e.CommandSource).NamingContainer);    
int rowIndex = row.RowIndex;