2017-09-07 2 views
0

GridView1_RowEditing1 이벤트를 사용하여 gridview select 행에서 세션 값을 전달하려고합니다. primarykey (p.key)에 대한 세션 값을 가져올 수 있지만 Associate_ID가 빈 값을 반환합니다.gridview findcontrol nothing returns empty string (공백)

C# 코드 뒤에

protected void GridView1_RowEditing1(object sender, GridViewEditEventArgs e) 
    { 
     int primarykey = Convert.ToInt32(GridView1.DataKeys[e.NewEditIndex].Value); 
     string name = Convert.ToString(GridView1.Rows[e.NewEditIndex].FindControl("Associate_ID")); 
     Session["Number"] = primarykey; 
     Session["Name"] = name; 
     //redirect 
     Response.Redirect("updatee.aspx"); 
    } 

.ASPX

<asp:TemplateField HeaderText="Associate_ID" SortExpression="Associate_ID"> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Associate_ID") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label1" runat="server" Text='<%# Bind("Associate_ID") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 

출력 :

키 : 5

이름 : 당신이 볼 수 있듯이 내가

을 받고 있지 않다선택된 필드에 대한 Associate_ID. 는 또한

string name = Convert.ToString(GridView1.Rows[3].Cells[3].FindControl("Associate_ID")); 

사용하여 시도했지만 결과가 없었다 그리드는 다수의 행과 열 (15 * 8)

gridview findcontrol returning empty ""을 제안하려고 재 바인딩 포스트 백의 GridView 정지하려고있다. 있는 gridview에서 제거 DataSourceID

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" OnRowEditing="GridView1_RowEditing1" OnSelectedIndexChanged="GridView1_SelectedIndexChanged"> 

코드이의

 protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      //DataSourceID = "SqlDataSource1" 
      GridView1.DataSource = SqlDataSource1; 
      GridView1.DataBind(); 
     } 
    } 

없음 뒤에이있었습니다. Associate_ID에 여전히 공백 값이 표시됩니다. 어디에 문제가 있는지 알 수 없습니다. 도와주세요!

답변

0

FindControl을 사용하여 Associate_ID 컨트롤을 찾으려고합니다. 그러나 그것은 존재하지 않습니다. TextBox1을 찾거나 TextBox의 이름을 Associate_ID로 바꿉니다.

<EditItemTemplate> 
    <asp:TextBox ID="Associate_ID" runat="server" Text='<%# Bind("Associate_ID") %>'></asp:TextBox> 
</EditItemTemplate> 

//or 

string name = Convert.ToString(GridView1.Rows[3].Cells[3].FindControl("TextBox1")); 

UPDATE

어떻게 든 당신이 편집 상태가의 GridView 리 바인딩에 의해 활성화되기 전에 그 제어에 액세스하려고하는 문제를 참조하십시오. 편집 색인이 설정되지 않았습니다. FindControl 앞에 놓으십시오.

GridView1.DataSource = yourSource; 
GridView1.EditIndex = e.NewEditIndex; 
GridView1.DataBind(); 
+0

를 통해 제공하지만이를 포기하지 않을거야 내 작업 코드는 모양입니다 것입니다 blank "" – rakesh

+0

또한 텍스트 상자의 이름을 변경하려고했지만 여전히 동일합니다. ( – rakesh

+0

는 아래에서 NULL을 실제로 반환한다는 것을 확인했습니다. 'TextBox name = (TextBox) GridView1.Rows [3] .Cells [3].-의 FindControl ("TextBox1에");' '문자열 QUES = name.Text는)'이 – rakesh

0

VDWWD에 감사드립니다. 마침내 작동하게되었습니다. 문제는 FindControl을 사용하여 gridview에서 'TextBox'요소를 가져올 수 없다는 것입니다. 해결책은 페이지의 포스트 백에서 GridView를 다시 바인딩하지 않고 RowEditing 이벤트에서 인덱스를 편집하는 것이 었습니다.

이 어느 한 이제까지 당신이 언급 한 바와 같이 내가 텍스트 상자의 ID를 변경 시도 비슷한 문제

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      GridView1.DataSource = SqlDataSource1; 
      GridView1.DataBind(); 
     } 
    } 
    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 
    { 
     GridView1.DataSource = SqlDataSource1; 
     GridView1.EditIndex = e.NewEditIndex; 
     GridView1.DataBind(); 
     TextBox txt = GridView1.Rows[e.NewEditIndex].FindControl("TextBox1") as TextBox; 
     string name = txt.Text; 
    } 

.ASPX

 <EditItemTemplate> 
        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("CountryName") %>'></asp:TextBox> 
       </EditItemTemplate>