2014-11-02 5 views
0

여기 내 ASP.NET 코드 단편입니다.'System.Web.UI.HtmlControls.HtmlForm'형식의 개체를 'System.Web.UI.WebControls.GridViewRow'형식으로 캐스팅 할 수 없습니다.

GridView 행을 선택하고 세션 변수에 선택한 행 항목을 추가하려고합니다.

// ======================== MyGridView ======================== 

protected void GridView_MyGridView_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    // Get Selected Row Items 

    Items myitems = new Items(); 

    Session["Items"] = myitems; 

    ((Invoices)Session["Items"]).ItemNo = int.Parse(((GridViewRow)(((WebControl)(sender)).Parent.Parent)).Cells[0].Text);  
} 

GridView 열과 함께 제공되는 클릭 가능한 선택 버튼을 사용하고 싶지 않습니다.

다음 코드에 의해 처리 : 이제

protected void GridView_MyGridView_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     e.Row.Attributes["onmouseover"] = "this.style.cursor='pointer';this.style.textDecoration='underline';"; 
     e.Row.Attributes["onmouseout"] = "this.style.textDecoration='none';"; 
     e.Row.ToolTip = "Click to Select a Visit."; 
     e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink(sender as GridView, "SELECT$" + e.Row.RowIndex); 
    } 
} 

, 나는이 프로그램을 실행할 때, 나는 즉시 다음과 같은 오류를 얻을 gridview에 선택된 행의 변경과 같은 :

의 개체를 캐스팅 할 수 없습니다 'System.Web.UI.HtmlControls.HtmlForm'을 입력하여 'System.Web.UI.WebControls.GridViewRow'를 입력하십시오.

의견을 보내주십시오.

답변

0

당신이 무엇을하려하지만 캐스트가 원인인지 확실하지 않습니다. Parent.Parent에 대한 호출이 너무 많이 올라가서 양식 컨테이너로 끝났으며 더 이상 GridView 내에 있지 않습니다. 대신 당신이 시도하고있는 캐스트의

, 왜 그냥 시도하지 : 당신이 취급보고 할 수 있도록 셀에 텍스트가없는 경우

GridViewRow row = GridView_MyGridView.SelectedRow; 
((Invoices)Session["Items"]).ItemNo = int.Parse(row.Cells[0].Text); 

이 명심, 이것은 여전히 ​​오류가 발생하지 않는다고 로직을 추가하거나 TryParse()를 사용하십시오.

+0

gridview는 데이터를 포함합니다. GridView 템플릿에서 select 열을 사용하는 경우에만 제안 된 코드가 작동합니다. 각 GridView 행 앞에있는이 선택 단추를 제거하고 e.row.Attributes를 사용하여 GridView 행을 선택하면됩니다. – CyborgHead

+0

코드를 수정 했으므로 이제 제안 된 코드를 사용하여 작동합니다. – CyborgHead