输入字符串的格式不正确,无法检索gridview值

时间:2013-10-28 07:11:49

标签: c# asp.net gridview

在我的网格视图中,我希望当用户点击激活时,它会导航到activate.aspx页面。我想从上一页检索三个值到activate.aspx页面。我的代码是:

    protected void Page_Load(object sender, EventArgs e)
    {
         if (this.Page.PreviousPage != null)
         {
         int rowIndex = int.Parse(Request.QueryString["RowIndex"]);
        GridView GridView1 = (GridView)this.Page.PreviousPage.FindControl("GridView1");
        GridViewRow row = GridView1.Rows[rowIndex];
        Label1.Text = row.Cells[3].Text;
        Label2.Text = row.Cells[2].Text;
        Label3.Text = row.Cells[2].Text;

        SqlDataAdapter da = new SqlDataAdapter("insert into login values('" + Label1.Text + "','" + Label2.Text + "','" + Label3.Text + "')",con);
        DataSet ds = new DataSet();
        da.Fill(ds);
     }
    }

  protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Redirect")
    {
        String email = "lblemail.Text";
        String mob = "lblmobno.Text";
        Server.Transfer("activate.aspx?RowIndex=" + email +mob, true);

    }
}

Aspx标记

   <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" 
        onrowcommand="GridView1_RowCommand">
        <Columns>
            <asp:TemplateField HeaderStyle-Font-Bold="true" HeaderStyle-Font-Size="Larger" HeaderText="Activate/Delete"
                ItemStyle-Width="150px">
                <ItemTemplate>
                    <asp:LinkButton ID="linkbutton1" runat="server" Text="Activate" CommandName="Redirect"
                        CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>'></asp:LinkButton>
                    <span onclick="return confirm('Are You sure want to Delete?')">
                        <asp:LinkButton ID="linkbutton2" runat="server" Text="Delete" CommandName="Delete"></asp:LinkButton>
                    </span>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

我收到输入字符串格式不正确的错误:

    int rowIndex = int.Parse(Request.QueryString["RowIndex"]);

请帮帮我。

2 个答案:

答案 0 :(得分:0)

这是因为您在RowIndex中发送文本/字符串,而RowIndex,即访问Rows集合的索引应该是整数。 您传递给rowindex的是'lblemail.Textlblmobno.Text',当您尝试将其解析为int时,它会抛出一个明显的错误。

更新:好的,你不需要传递rowIndex。

首先改变: -

String email=lblEmail.Text;

String mob=lblMob.Text;

第二次改变: -

将查询字符串参数重命名为更有意义的名称(我已在以下代码中将其重命名为rowIndex to email)

第三次改变: -

protected void Page_Load(object sender, EventArgs e)
{
    String email= Request.QueryString["email"];
    String mobNumber= Request.QueryString["mob"];
    String yourThirdParameter = Request.QueryString["thirdOne"]; // Provide your third parameter.

    SqlDataAdapter da = new SqlDataAdapter("insert into login values('" + email + "','" + mob + "','" + yourThirdParameter  + "')",con);
// Assuming this is the sequence.you can change it your way.

    DataSet ds = new DataSet();
    da.Fill(ds);

}


protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Redirect")
    {
        String email = lblemail.Text;
        String mob = lblmobno.Text;
        String thirdOne= // Fill it as is the need
        Server.Transfer("activate.aspx?email=" + email+"&mob=" +mob+"&thirdOne="+thirdOne, true);

    }
}

ALert: - 我怀疑你是否必须传递密码,因此不应使用QueryString。 同样传递电子邮件,不建议在QueryString中使用手机号码。

答案 1 :(得分:0)

 if (e.CommandName == "Redirect")
    {
        String email = "lblemail.Text";
        String mob = "lblmobno.Text";
        Server.Transfer("activate.aspx?RowIndex=" + email +mob, true);

    }

在这里您可以看到您将电子邮件和移动值作为查询字符串值发送,因此您的查询字符串将如下所示

<强> activate.aspx?的rowIndex = lblemail.Textlblmobno.Text

当你获得rowindex值时,它将返回 lblemail.Textlblmobno.Text 作为值调试它并观察它你会看到它现在你要做什么是从你正在使用的gridview传递int值

您也可以使用隐藏字段,并从 GridView1_RowCommand

中找到它

我希望这会帮助你... ...)