2011-02-02 4 views
2

を使用した後にSystem.FormatExceptionを受信:GridViewRowでコンパイルし、クリックした後私は、次のコードビハインド・コードを使用して、GridViewコントロールのためのonclick振る舞いをコーディングしようとしているClientScript

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 
    } 
} 

、私のgridProcesses_RowCommand SelectProcessがCommandNameとして渡されたので、そのコード内で何をしようとしていても、次のエラーをスローした後にプログラムが機能しなくなる:

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) 

SelectButtonを追加して、レンダリングメソッドをオーバーライドする代わりにOnSelectedIndexChangingを使用し、rowdataboundを使用してonclickハンドラを追加すると、同じコードが正常に機能します。

+0

あなたは 'if'行で例外を発生させることを意味します。 –

+0

いいえ、コードは完全に実行されますが、フレデリックは私が探していた答えを投稿しました! –

答えて

2

コントロールでは、イベントのCommandArgumentプロパティをページ番号として使用できるPageコマンドがサポートされています。このプロパティを変換中に失敗しているようです。

ifブロックのe.CommandArgumentの外側にのブロックを割り当てますか?その場合、SelectProcess以外のコマンドに影響するため、実行しないでください。

+0

優秀な、そのトリックをした、ありがとう! GridView内のCommandValueにCommandArgumentを設定し、他のコマンドに影響する可能性があるかどうかはわかりません。 –

+0

私は同じ問題を抱えていますが、どこにe.commandArgumentを設定していませんか? – scouserider

関連する問題