Receiving System.FormatException after using ClientScript

1.1k views Asked by At

I'm trying to code an onclick behaviour for a GridView by using the following codebehind-code:

protected void gridProcesses_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Attributes["onmouseover"] = "this.style.cursor='hand';";
        e.Row.Attributes["onmouseout"] = "this.style.textDecoration='none';";
        e.Row.Attributes["onclick"] = ClientScript.GetPostBackClientHyperlink(this.gridProcesses, "SelectProcess$" + e.Row.Cells[0].Text);
    }
}

protected override void Render(HtmlTextWriter writer)
{
    foreach(GridViewRow row in gridProcesses.Rows)
    {
        if (row.RowType == DataControlRowType.DataRow)
            this.ClientScript.RegisterForEventValidation(this.gridProcesses.UniqueID, "SelectProcess$" + row.Cells[0].Text);
    }
    base.Render(writer);
}

protected void gridProcesses_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "SelectProcess")
    {
       //do stuff after click on gridviewrow
    }
}

After compiling and clicking on a GridViewRow, my gridProcesses_RowCommand is called and enters the "if", since SelectProcess was passed as CommandName, whatever I am trying to do within that code works, but afterwards the program just stops working after throwing the following error:

System.Web.HttpUnhandledException (0x80004005): Eine Ausnahme vom Typ "System.Web.HttpUnhandledException" wurde ausgelöst. ---> System.FormatException: Input string was not in a correct format.
   bei System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   bei System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
   bei System.Convert.ToInt32(String value, IFormatProvider provider)
   bei System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup)
   bei System.Web.UI.WebControls.GridView.RaisePostBackEvent(String eventArgument)
   bei System.Web.UI.WebControls.GridView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
   bei System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
   bei System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
   bei System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   bei System.Web.UI.Page.HandleError(Exception e)
   bei System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   bei System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   bei System.Web.UI.Page.ProcessRequest()
   bei System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)
   bei System.Web.UI.Page.ProcessRequest(HttpContext context)
   bei ASP.processes_aspx.ProcessRequest(HttpContext context) in c:\Users\roett04\AppData\Local\Temp\Temporary ASP.NET Files\root\4c906b5d\4377a67f\App_Web_qcvmvpfq.0.cs:Zeile 0.
   bei System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   bei System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

The same code works just fine if I add a SelectButton and use OnSelectedIndexChanging instead of overriding the render-method and using rowdatabound to add the onclick-handler.

1

There are 1 answers

2
Frédéric Hamidi On BEST ANSWER

The GridView control supports a Page command that can use the CommandArgument property of the event as a page number. It seems to be failing while converting this property.

Do you perchance assign something to e.CommandArgument outside of your if block? If that's the case, you shouldn't do it, because it will impact commands other than SelectProcess.