2016-06-09 5 views
0

У меня есть функция загрузки, вызываемая в ROWCOMMAND gridview. Он работает, когда я нажимаю на него, но перестает работать, если я нажму (вызову) другую функцию в команде строк. Это не исключение. Я пробовал отлаживать каждый шаг, но не повезло.Почему команда row неправильно работает?

Почему?

Скачать Функция:

public void DownloadFile(string FileName) 
{ 
    try 
    { 
     string filePath = FileName; 
     string fullFilePath = Server.MapPath("../../SiteImages/BPA/" + filePath); 
     Response.Clear(); 
     Response.ClearHeaders(); 
     Response.ClearContent(); 
     Response.AddHeader("Content-Disposition", "attachment; filename=\"" + Path.GetFileName(fullFilePath) + "\""); 
     Response.ContentType = ContentType; 
     Response.TransmitFile(fullFilePath); 
    } 

RowCommand:

protected void grdViewUploadedMaterialOther_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    try 
    { 

     if (e.CommandName == "Download") 
     { 
      mdlImgPreview.Hide(); 

      string FileName = Convert.ToString(e.CommandArgument); 

      DownloadFile(FileName); 

      return; 
     } 

     if (e.CommandName == "View") 
     { 
      imgPreviewed.ImageUrl = "../../SiteImages/BPA/" + e.CommandArgument.ToString(); 
      mdlImgPreview.Show(); 
     } 

    } 
    catch (Exception ex) 
    { 
     ResultLabel.ResultLabelAttributes(ex.Message, ProjectUserControls.Enums.ResultLabel_Color.Red); 
    } 
    finally 
    { 
     ResultPanel.Controls.Add(ResultLabel); 
    } 

RowDataBound: Для того, чтобы зарегистрировать кнопку

protected void grdViewUploadedMaterialOther_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     try 
     { 
      LinkButton lb = e.Row.FindControl("btnLinkDownload") as LinkButton; 
      RegisterDownloadButton(lb); 
     } 
     catch (Exception ex) 
     { 
      ResultLabel.ResultLabelAttributes(ex.Message, ProjectUserControls.Enums.ResultLabel_Color.Red); 
     } 
     finally 
     { 
      ResultPanel.Controls.Add(ResultLabel); 
     } 
    } 

Регистрация Функция:

public void RegisterDownloadButton(LinkButton lb) 
    { 
     try 
     { 

      if (lb != null) 
       ScriptManager.GetCurrent(this).RegisterPostBackControl(lb); 


     } 
     catch (Exception ex) 
     { 
      ResultLabel.ResultLabelAttributes(ex.Message, ProjectUserControls.Enums.ResultLabel_Color.Red); 
     } 
     finally 
     { 
      ResultPanel.Controls.Add(ResultLabel); 
     } 
    } 

Gridview:

<asp:GridView runat="server" ID="grdViewUploadedMaterialOther" Width="100%" OnRowDataBound="grdViewUploadedMaterialOther_RowDataBound" 
    OnRowCommand="grdViewUploadedMaterialOther_RowCommand" HeaderStyle-BackColor="#99CC99" 
    DataKeyNames="Pk_UploadedMaterialOther_ID" 
    AutoGenerateColumns="false" 
    CssClass="table table-condensed table-bordered table-striped table-responsive"> 
    <PagerSettings Mode="Numeric" /> 
    <PagerStyle HorizontalAlign="Center" CssClass="gvwCasesPager" /> 
    <Columns> 

     <asp:TemplateField HeaderText="View Attachment"> 
      <ItemTemplate> 
       <asp:LinkButton ID="btnLnkViewAttachment" runat="server" Text="View" CommandArgument='<%# Eval("MaterialPath") %>' CommandName="View"></asp:LinkButton> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Download"> 
      <ItemTemplate> 
       <asp:LinkButton ID="btnLinkDownload" runat="server" Text='<%# Eval("MaterialPath") %>' 
        CommandArgument='<%# Eval("MaterialPath") %>' CommandName="Download"></asp:LinkButton> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Delete"> 
      <ItemTemplate> 
       <asp:ImageButton ID="btnDelete" runat="server" ImageUrl="~/assets/global/images/delete.png" 
        CommandName="cmdDelete" CommandArgument='<%# Container.DataItemIndex %>' 
        ControlStyle-Width="20px" 
        ControlStyle-Height="20px" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

ответ

0

пытаются добавить контроль UpdatePanel в GridView, который решит вашу проблему.

ссылайтесь на следующий код, это может вам помочь.

<asp:TemplateField HeaderText="Download"> 
     <ItemTemplate> 
      <asp:UpdatePanel runat="server" UpdateMode="Conditional" ID="fileUploadPanel"> 
     <ContentTemplate> 
        <asp:LinkButton ID="btnLinkDownload" runat="server" Text='<%# Eval("MaterialPath") %>' 
          CommandArgument='<%# Eval("MaterialPath") %>' CommandName="Download"></asp:LinkButton> 
     </ContentTemplate> 

        <Triggers> 
         <asp:PostBackTrigger ControlID="btnLinkDownload" /> 
        </Triggers> 
    </asp:UpdatePanel> 
     </ItemTemplate> 
    </asp:TemplateField> 
+0

не работает. извините – Cuckoo

+0

любым другим способом? – Cuckoo

+0

приведенный выше код может быть обработан, потому что он содержит идентификаторы control каждой строки. Вы пытались использовать все поля шаблона в своем коде. –

Смежные вопросы