2015-01-07 5 views
0

많은 검색과 테스트가 끝나면 의견을 구할 때입니다.
의 GridView EditItemTemplate에서 파일 업로드와 업데이트 패널 내부 : 그런 다음gridview 행 편집 RegisterPostBackControl

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
        <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" 
         AutoGenerateColumns="False" OnRowUpdating="GridView1_RowUpdating" 
         OnRowDataBound="GridView1_RowDataBound" OnRowEditing="GridView1_RowEditing" 
         OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowCommand="GridView1_RowCommand" > 
         <Columns> 
          <asp:CommandField ShowEditButton="True" ShowDeleteButton="true" >          
          </asp:CommandField> 
          <asp:TemplateField HeaderText="Attachment" SortExpression="FileName"> 
           <EditItemTemplate> 
            <asp:FileUpload ID="FileUpload1" runat="server" /><br /> 
            <asp:Button ID="btnAddAttachment" runat="server" Text="Upload File" CommandName="AddAttachment" 
             CommandArgument='<%# Bind("ID") %>' /> 
           </EditItemTemplate> 
           <ItemTemplate> 
            <a id="ancLink" runat="server" href='<%# "~/Files/" + (DataBinder.Eval(Container.DataItem,"FileName")) %>' 
             target="_blank"> 
             <asp:Label ID="lblAnchor" runat="server"></asp:Label></a> 
           </ItemTemplate> 
          </asp:TemplateField> 
         </Columns> 
        </asp:GridView> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
</asp:Content> 

EditItemTemplate에서 단추를 들면, RegisterPostBackControl 추가

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      if ((e.Row.RowState == DataControlRowState.Edit) || ((e.Row.RowState & DataControlRowState.Edit) > 0)) 
      { 
       Button btnAddAttachment = (Button)e.Row.FindControl("btnAddAttachment"); 
       AjaxControlToolkit.ToolkitScriptManager ToolkitScriptManager1 = (AjaxControlToolkit.ToolkitScriptManager)Master.FindControl("ToolkitScriptManager1"); 
       ToolkitScriptManager1.RegisterPostBackControl(btnAddAttachment); 
      } 
     } 
    } 

문제가를 그 RegisterPostBackControl은하지 않습니다 파일 업로드를 처음 시도 할 때 사용자가 동일한 행을 다시 편집하면 두 번째 시도가 올바르게 작동합니다.
RegisterPostBackControl이 두 번째 게시물에 적용되기 때문에 가능성이 큽니다.
버튼에 처음으로 전체 포스트 백이있는 방법이 있습니까?
나는 주위에 작업하는 쉬운 방법이 알고 있지만 이것은 UpdatePanel의 목적을 패배 :

 <Triggers> 
     <asp:PostBackTrigger ControlID="GridView1" /> 
    </Triggers> 

만 이후
관리자 편집에 접근, 뒤에있는 코드에서 그리드의 PostBackTrigger 설정을해야합니다 또한 관리자 만 사용할 수있는 옵션이지만 다시 한 번 업데이트 패널의 목적을 무효화합니다.
모든 의견을 환영합니다. 당신은 지금 뭔가를 밀어해야하는 경우

ChildrenAsTriggers="true" 

그것은 임시 해결 방법으로 작업 할 수 있습니다

+0

'RowDataBound'는'DataSource'를'GridView'에 바인드 할 때 트리거됩니다. 모든 포스트 백에서 'RegisterPostBackControl'을 호출합니다. 그러므로'RowCreated'를 대신 사용하십시오. –

+0

이렇게하면 많은 컨트롤을 트리거로 바인딩해야합니다. 그렇게 추한 것 같아. GridView의 OnRowCommand = "GridView1_RowCommand"이벤트를 설정하는 것이 좋습니다. 한편,'commandname'을 버튼에 설정하십시오 ('CommandName = "upload"'). 그런 다음 GridView Command 이벤트를 트리거로 설정하기 만하면됩니다. 또한 서버 측에서는 rowcommand 이벤트에서 어떤 작업을 수행 할 수 있으며 어떤 fileupload 컨트롤이 포스트 백을 트리거하는지 알 수 있습니다. – Avijit

+0

@Tim - RowCreated 이벤트에 추가하는 기능이 작동하지 않습니다. @ Avijit - RowCommand에 추가하는 기능이 작동하지 않습니다. 그러나 제안에 감사드립니다. –

답변

0

요인의 많은에 따라, updatepannel 옵션을 시도 할 수 있습니다.

0

코드에 따라 기본값이 ChildrenAsTriggers이고 UpdateMode이 항상이므로 항상 전체 포스트 백을 얻어야합니다.

하지만 Gridview의 DataSourceID를 설정하지 않아서 코드 어딘가에 있지 않으면 Databind가되지 않습니다. 하지만 등록하려고하는 컨트롤을 찾기 위해서 초기에 편집 모드에 있어야합니다. 그래서 편집 모드로 갈 때 컨트롤을 등록해야합니다. 그리드 뷰 RowEditing 이벤트에서 컨트롤을 찾아서 등록 해 봅니다.

+0

격자가 코드 뒤에 바인딩됩니다. sqldatasource를 절대로 사용하지 않습니다. 단추는 RowEditing 이벤트에서 발견되지만 RegisterPostbackControl을 추가해도 여전히 작동하지 않습니다. –