2017-10-20 5 views
1

나는 이상한 상황이 있습니다.GridView onRowUpdating 텍스트 상자에 이벤트 액세스

  • : 이

    <asp:gridview ID="grdBooks" class="grdBooks" runat="server" width="100%" DataKeyNames="RecId,RefAuthorsRecId,RefBooksTypeRecId" autogeneratecolumns="false" onDataBound="grdBooks_dataBound" onPreRender="grdBooks_preRender" onrowediting="grdBooks_RowEdit" onrowupdating="grbBooks_onRowUpdating" onrowupdated="grdBooks_onUpdated" autogenerateeditbutton="true" onrowcancelingedit="grdBooks_onCancelingEdit"> 
          <Columns> 
           <asp:TemplateField HeaderText="Title"> 
            <EditItemTemplate> 
             <asp:TextBox ID="txtgrdTitle" runat="server" width="200px"></asp:TextBox> 
             <asp:Label ID="lblgrdTitle2" runat="server" visible="false" Text='<%# Eval("Title") %>'></asp:Label> 
            </EditItemTemplate> 
            <ItemTemplate> 
             <asp:Label ID="lblgrdTitle" runat="server" Text='<%# Bind("Title") %>'></asp:Label> 
            </ItemTemplate> 
           </asp:TemplateField>..... 
    

    이것은 "onRowEdit"와 "onRowUpdating"

    protected void grdBooks_RowEdit(object sender, GridViewEditEventArgs e) 
    { 
        grdBooks.EditIndex = e.NewEditIndex; 
        grdBooks.DataSource = book; 
        grdBooks.DataBind(); 
        TextBox txtTitle = grdBooks.Rows[e.NewEditIndex].FindControl("txtgrdTitle") as TextBox; 
        Label lblTitle = grdBooks.Rows[e.NewEditIndex].FindControl("lblgrdTitle") as Label; 
        txtTitle.Text = lblTitle.Text; 
    } 
    protected void grbBooks_onRowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 
        TextBox txtTitle = grdBooks.Rows[e.RowIndex].FindControl("txtgrdTitle") as TextBox; 
        .... 
    } 
    

    문제는의 일부입니다 내있는 gridview의 ASCX의 코드의 일부이다 rowEdit 잘 작동, 편집 가능한 텍스트 상자에서 모눈의 모든 행을 변경하십시오. 문제는 내가 텍스트 상자에 무언가를 쓰고 "update"를 누르고 "onRowUpdate"메쏘드로 갈 때 내가 초기화 한 텍스트 객체에 새로운 텍스트가 없다는 것입니다. 나는 오래된 것을 가지고있다.

(원래 제목의 값을 가지고있는 editTemplate에 보이는 레이블을 사용하고 있습니다.) 텍스트 상자에 Eval ("title")을 넣기 전에는이 코드가 probl 그래서 다른 방법을 시도해보십시오)

+0

'e.NewValues' 사전 사용 –

답변

0

데이터 소스로는 데이터 테이블의 현재 로우를 가져와 해당 행의 값을 업데이트하십시오. 그리드를 다시 바인드하십시오.

GridViewRow gridEditRow = this.grdBooks.Rows[e.RowIndex]; 
DataRow CurentRow = book.Rows[gridEditRow.DataItemIndex]; 

CurentRow["Title"] = (gridEditRow.FindControl("txtgrdTitle") as TextBox).Text; 
+0

문제가 dt를 채우지 않습니다. 내가 텍스트 상자에 쓴 텍스트를 다시 찾을 수 없다는 것입니다. .Text 값은 항상 ""(비어 있음)입니다. 이것은 필자의 예제이며 코드에도 적용되므로 findControl을 사용하면 정확한 행에 표시됩니다. –