2012-12-10 2 views
1

매개 변수를 gridview의 레이블에서 전달하려고하면 첫 번째 행의 레이블 텍스트 만 전달됩니다.gridview

무엇이 누락되었는지 확실하지 않습니다. Response.Redirect와 당신은 루프를 깨고있다

protected void GV1_OnRowCommand(object sender, GridViewCommandEventArgs e) 
    { 
     if (e.CommandName == "edit") 
     { 


      foreach (GridViewRow row in GridView1.Rows) 
      { 
       if (row.RowType == DataControlRowType.DataRow) 
       { 
        Label lbl_taskID = (Label)row.FindControl("lbl_taskID"); 

        Session["TaskID"] = lbl_taskID.Text; 

        Response.Redirect("~/tasks_edit.aspx"); 
       } 
      } 
     } 
    } 
+0

코드를 디버깅 했습니까? 어떤 줄이 잘못 되었습니까? 오류 메시지가 무엇입니까? spesific하십시오. –

+0

전혀 오류가 없습니다 –

답변

0

, 뭐하고 수 같은 몇 가지로 각 행에 레이블의 이름을 지정해야하고 그것은 효과가있다.

죄송합니다.

1

당신은 당신이 또한 lbl_taskID 모든 행의 대신 writting 이상 값을 연결해야하는 모든 값을 설정하는 측면 루프 밖으로 할 일 Response.Redirect을 넣어해야합니다.

protected void GV1_OnRowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    string taskIds = string.Empty; 
    if (e.CommandName == "edit") 
    { 


     foreach (GridViewRow row in GridView1.Rows) 
     { 
      if (row.RowType == DataControlRowType.DataRow) 
      { 
       Label lbl_taskID = (Label)row.FindControl("lbl_taskID"); 

       if(Session["TaskID"] != null) 
        taskIds = Session["TaskID"].ToString(); 
       Session["TaskID"] = taskIds + lbl_taskID.Text + ",";     
      } 
     } 
     Response.Redirect("~/tasks_edit.aspx"); 
    } 
} 
+0

위 코드를 편집하십시오주십시오 –

+0

응답을했습니다.루프 외부에서 리디렉션하지만 여전히 첫 번째 행 텍스트를 가져 오는 중 –

+0

미안하지만 멍청한 메시지입니다 –

0

당신은 foreach 루프를 사용하고 있지만 한 Session 변수에 단일 값을 할당하는 루프를 사용하고 있습니다. 그래서 당신은 무엇을 기대합니까?

그러나 마지막 행에 첫 번째 행이 할당되지 않았다고 가정합니다.

Response.Redirect("~/tasks_edit.aspx")은 현재 요청을 중단하므로 루프 외부에 넣어야합니다.

foreach (GridViewRow row in gridView1.Rows) 
{ 
    if (row.RowState == DataControlRowState.Edit) 
    { 
     Label lbl_taskID = (Label)row.FindControl("lbl_taskID"); 
     Session["TaskID"] = lbl_taskID.Text; 
     break; 
    } 
} 
Response.Redirect("~/tasks_edit.aspx"); 

사이드 노트 : 당신은 편집 모드에서 현재 행을 할당 할 수 있습니다 만 (RowDataBound -event 달리) 어쨌든 DataControlRowType.DataRow로 행을 반환 DataControlRowTypeGridView.Rows부터 체크 할 필요가 없습니다.

편집 : 당신이 foreach 루프를 사용하는 이유는 다음 첫 번째 행이 사용되는 경우

protected void EditLink_Clicked(Object sender, EventArgs e) 
{ 
    // get the LinkButton reference 
    LinkButton link = (LinkButton) sender; 
    // get the GridViewRow reference via NamingContainer 
    GridViewRow row = (GridViewRow) link.NamingContainer; 
    Label lbl_taskID = (Label) row.FindControl("lbl_taskID"); 
    Session["TaskID"] = lbl_taskID.Text; 
    Response.Redirect("~/tasks_edit.aspx"); 
} 
+0

처음부터 시작할 수 있습니다 : gridview 각 행은 레코드 ID를 가진 라벨 텍스트를 사용하여 레코드를 편집하기위한 링크 버튼을 가지고 있습니다. 편집 페이지에 해당 ID를 전달하려고합니다. tasks_edit.aspx –

+0

그럼 왜' 대신에 하이퍼 링크'-'Click'-event? 그에 따라 내 대답을 편집했습니다. –

0

, 대신 RowCommand의 내가 LinkButton의 클릭 이벤트를 사용해야합니까? 현재 다음 컬럼을 편집 할 레이블 텍스트를 의미하는 경우 당신은 단순히 find the control of the 0th row.

if (e.CommandName == "edit") //this makes sure that you have a row 
{ 
    Label lbl_taskID = (Label)GridView1.Rows[0].FindControl("lbl_taskID"); 
    Session["TaskID"] = lbl_taskID.Text; 
    Response.Redirect("~/tasks_edit.aspx"); 
} 

CommandArgument에서 take the index of the editing column 및 라벨

if (e.CommandName == "edit") //this makes sure that you have a row 
{ 
     int index = Convert.ToInt32(e.CommandArgument); //currently editing row index 
     Label lbl_taskID = (Label)GridView1.Rows[index].FindControl("lbl_taskID"); 
     Session["TaskID"] = lbl_taskID.Text; 
     Response.Redirect("~/tasks_edit.aspx"); 
} 
0

을 얻을 당신은 어떻게 모든 행에 lbl_taskID이 올 수 있습니까?

Label lbl_taskID = (Label)row.FindControl("lbl_taskID"); 

당신의 것은 - 당신의 foreach 루프에서 당신은 실제로 단지 당신의 첫 번째 행의 lbl_taskID 현재의 값을하고있다. 다음 행에는 동일한 요소가 다시 없을 것입니다. 코딩이 잘못되었습니다. 당신은 this-이 label0, label1 ... 다음 코드에서 당신은 내가있는 gridview 마법사에서 자동으로 생성 EDIT 버튼을 사용했다

  int i=0; 
      foreach(GridViewRow row in GridView1.Rows) 
      { 
       Label xyz = (Label)row.FindControl("Label"+i); 
       Session["TaskID"+i] =xyz.Text; //to have unique session variables 
       i++; 
      } 
      Response.Redirect("~/tasks_edit.aspx"); // you should redirect only when you come out of the loop