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.
The
GridView
control supports aPage
command that can use theCommandArgument
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 yourif
block? If that's the case, you shouldn't do it, because it will impact commands other thanSelectProcess
.