2017-10-10 1 views
0

이 질문은 이전에 물어 보았지만 그 게시물에서 솔루션을 시도했지만 아무 것도 작동하지 않습니다.입력이 Gridview 행 업데이트 이벤트에 저장되지 않습니다.

XML 파일을 채우고 업데이트하는 데 필요한 gridview가 있습니다. 이 gridview가있는 페이지의 목적 때문에 데이터 바인딩은 page_load 이벤트에서 발생합니다. 또한 TemplateFields를 사용하여 gridview의 레이아웃을 제어하고 있습니다.

여기 내 코드가 있습니다. 첫째, GRIDVIEW :

<asp:GridView ID="fileGrid" runat="server" EnableViewState="true" AutoGenerateColumns="False" Width="315px" BorderStyle="None" 
OnRowDeleting="fileGrid_RowDeleting" OnRowEditing="fileGrid_RowEditing" 
OnRowCancelingEdit="fileGrid_RowCancelingEdit" OnRowUpdating="fileGrid_RowUpdating" 
OnRowDataBound="fileGrid_RowDataBound"> 
<Columns> 
    <asp:BoundField DataField="name" HeaderText="Uploaded Files" SortExpression="name" ReadOnly="true"> 
     <ItemStyle CssClass="fileName" /> 
    </asp:BoundField> 
    <asp:TemplateField HeaderText="Description"> 
     <ItemStyle CssClass="desc-cell" /> 
     <ItemTemplate> 
      <asp:Label ID="Label1" runat="server" Text='<%# Bind("desc") %>'></asp:Label> 
     </ItemTemplate> 
     <EditItemTemplate> 
      <asp:TextBox ID="descTb" runat="server" Text='<%# Bind("desc") %>'></asp:TextBox> 
     </EditItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField> 
     <ItemStyle CssClass="cmdCell" /> 
     <ItemTemplate> 
      <asp:LinkButton ID="lnkEdit" runat="server" CommandName="Edit">Edit</asp:LinkButton>        
     </ItemTemplate> 
     <EditItemTemplate> 
      <asp:LinkButton ID="lnkUpdate" runat="server" CommandName="Update">Update</asp:LinkButton> 
     </EditItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField> 
     <ItemStyle CssClass="cmdCell" /> 
     <ItemTemplate> 
      <asp:LinkButton ID="lnkDelete" runat="server" CommandName="Delete">Delete</asp:LinkButton> 
     </ItemTemplate> 
     <EditItemTemplate> 
      <asp:LinkButton ID="lnkCancel" runat="server" CommandName="Cancel">Cancel</asp:LinkButton> 
     </EditItemTemplate> 
    </asp:TemplateField> 
</Columns> 

그리고 내 OnRowUpdating 기능. 문제가 발생하는 곳입니다 :

protected void fileGrid_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    int eRow = e.RowIndex; 
    GridViewRow row = fileGrid.Rows[eRow]; 

    string name = row.Cells[0].Text; 
    string desc = ((TextBox)(row.Cells[1].FindControl("descTb"))).Text; 

    // Update XML via Linq-to-XML here 
} 

그러나, 나는 아무것도를 위해 descTb 텍스트 상자에 입력 된 값을 캡처 할 수 없습니다. "desc"는 항상 null로 돌아옵니다. RowUpdating 전에 page_load 발생합니다 알고 있지만 내 gridview 빈 다시 온다 때문에 PostBack 체크 내 gridview 채우는 코드를 래핑 할 수 없습니다. 그리고 여전히 그 피 묻은 텍스트 값을 가져 오지 않습니다. 초기, 그리드보기 데이터를 세션 메모리에 미리 편집하고 RowUpdating 이벤트에서 업데이트하는 것은 작동하지 않습니다. TextView 컨트롤에서 EnableViewState를 "true"로 설정하고 텍스트 속성에서 < % Bind() %>를 제거하면 작동하지 않습니다.

누구에게 아이디어가 있습니까?

답변

0

의 RowUpdating 이벤트에 별도의 GridViewRow를 얻을 수있을 필요가 없습니다, 당신은 등 GridView.Rows[e.RowIndex].FindControl를 사용할 수 있습니다

string desc = ((TextBox)(fillGrid.Rows[e.RowIndex].FindControl("descTb"))).Text; 
업데이트

:

: 여기 당신을 도울 수있는 몇 가지 논리 코드
protected void Page_Load(object sender, EventArgs e) 
{ 
    fillGrid.DataSource = table; 

    if(!IsPostBack) 
     fillGrid.DataBind(); 
} 
protected void fillGrid_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
    fillGrid.EditIndex = e.NewEditIndex; 
    fillGrid.DataBind(); 
}  

protected void fillGrid_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    string desc = ((TextBox)(fillGrid.Rows[e.RowIndex].FindControl("descTb"))).Text; 
} 
+0

저는 가능한 한 간단한 코드를 작성하고 싶습니다. 어떤 경우이든 변경하면 문제가 해결되지 않습니다. –

+0

내 대답을 업데이트했습니다. – AsifAli72090

관련 문제