2014-05-20 3 views
0

나는 UpdatePanel 내에 그리드와 몇몇 텍스트 박스를 가지고 있습니다. 주의 행을 선택할 때 텍스트 상자는 JS를 사용하여 채워집니다. UpdatePanel은 하나의 텍스트 상자가 코드의 메서드를 사용하여 채워짐에 따라 도입되었습니다. 또한 코드 행에서 채워진 팝업을 열어주는 격자 행의 링크가 있습니다.UpdatePanel 내의 Grid에서 포스트 백

UpdatePanel을 사용한 후 링크가 작동하지 않습니다 (전체 게시물이 없기 때문에 가정).

나는 UpdateMode = "Conditional"속성을 사용하고 PostBAck 컨트롤에 대한 링크 컨트롤을 등록하려고 시도했다. 하지만 여전히 작동하지 않습니다 :

<asp:UpdatePanel ID="Update" runat="server" Up> 
     <ContentTemplate> 
      <table width="100%"> 
       <tr> 
        <td> 
         <asp:GridView ID="gvSession" BorderColor="#ffcc00" RowStyle-BorderColor="#ffcc00" 
          AutoGenerateColumns="False" Font-Names="Verdana" DataKeyNames="SessionId" runat="server" 
          RowStyle-BorderStyle="Solid" RowStyle-BorderWidth="1px" GridLines="Both" Width="100%" 
          OnRowCreated="gvSession_RowCreated" OnDataBound="gvSession_DataBound"> 
          <RowStyle CssClass="dbGrid_Table_row" /> 
          <HeaderStyle CssClass="dbGrid_Table_Header" /> 
          <Columns> 
           <asp:TemplateField> 
            <ItemTemplate> 
             <asp:RadioButton ID="rbSelect" onclick="javascript:CheckOtherIsCheckedByGVIDMore(this);" 
              runat="server" OnCheckedChanged="rbSelect_CheckedChanged" AutoPostBack="True" /> 
            </ItemTemplate> 
           </asp:TemplateField> 
           <asp:TemplateField HeaderText="Session Name"> 
            <ItemTemplate> 
             <asp:Label ID="lblSessionName" Text='<%# Eval("SessionName") %>' runat="server"></asp:Label> 
            </ItemTemplate> 
            <ItemStyle HorizontalAlign="Left" Width="16%"></ItemStyle> 
           </asp:TemplateField> 
                    <asp:TemplateField HeaderText="Preview"> 
            <ItemTemplate> 
             <asp:LinkButton ID="lbPreview" Text="Preview" CommandName="Preview" AutoPostBack="true" 
             CommandArgument='<%# Eval("SessionId") + ";" + Eval("TrainingTypeName") %>' 
              runat="server" OnClick="lbPreview_Click"></asp:LinkButton> 
            </ItemTemplate> 
            <ItemStyle HorizontalAlign="Center" Width="10%"></ItemStyle> 
           </asp:TemplateField> 
           </Columns> 
         </asp:GridView> 
        </td> 
       </tr> 
      </table> 
      <table id="Table2" runat="server" width="100%"> 
       <tr> 
        <td colspan="2" align="center" style="text-align: center"> 
         <asp:TextBox ID="txtSessionDtl" runat="server" Font-Size="Small" Style="text-align: center" 
          ForeColor="Black" Wrap="true" Height="20px" Width="95%" BorderStyle="None"></asp:TextBox> 
        </td> 
       </tr> 
       <tr> 
        <td style="width: 12%"> 
         <asp:Label ID="Label9" CssClass="label" runat="server">Upload File : </asp:Label> 
        </td> 
        <td> 
         <asp:TextBox ID="txtFilePath" Enabled="false" BorderStyle="Solid" BorderColor="Black" 
          runat="server" Width="741px"></asp:TextBox> 
        </td> 
       </tr> 
      </table> 
         </ContentTemplate> 
    </asp:UpdatePanel> 

코드 뒤에

코드 : 링크 클릭에 대한

: 등록 제어를 위해

protected void lbPreview_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      LinkButton link = (LinkButton)sender; 
      GridViewRow gv = (GridViewRow)(link.Parent.Parent); 
      LinkButton linkPreview = (LinkButton)gv.FindControl("lbPreview"); 
      string[] arg = new string[2]; 
      arg = linkPreview.CommandArgument.ToString().Split(';'); 
      string strSessionId = arg[0]; 
      string strTrgType = arg[1]; 
      string mailContent = GenerateNominationMailer(strSessionId, strTrgType); 
      hidMailContent.Value = mailContent; 
      string mailContent1 = mailContent.Replace(System.Environment.NewLine, ""); 

      string myScript = "<SCRIPT LANGUAGE='javascript'>"; 
      myScript = myScript + " my_window = window.open('', '', 'status=1,width=1000,height=800,scrollbars=yes');"; 
      myScript = myScript + " my_window.document.write(\"" + mailContent1.Replace("\"", "'") + "\");"; 
      myScript = myScript + " my_window.document.close();"; 
      myScript = myScript + " </script>"; 
      this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Nomination Mailer", myScript,false); 
     } 
     catch (Exception ex) 
     { 
      AlnErrorHandler.HandleError(ex); 

     } 
    } 

:

protected void gvSession_DataBound(object sender, EventArgs e) 
    { 
     foreach (GridViewRow grdrow in gvSession.Rows) 
     { 
      LinkButton Preview = (LinkButton)grdrow.FindControl("lbPreview"); 
      ScriptManager current = ScriptManager.GetCurrent(Page); 
      if (current != null) 
       current.RegisterPostBackControl(Preview); 
     } 
    } 
enter code here 

답변

0

이벤트에 트리거를 설정하십시오. 이

protected void gvSession_DataBound(object sender, GridViewRowEventArgs e) 
{ 
    LinkButton Preview = e.Row.FindControl("lbPreview") as LinkButton; 
    ScriptManager.GetCurrent(this).RegisterAsyncPostBackControl(Preview); 
} 

로 이전 이벤트를 교체 ContentTemplate

<Triggers> 
     <asp:AsyncPostBackTrigger ControlID="lbPreview" EventName="Click" /> 
</Triggers> 
+0

내가 ID 'lbPreview이 오류 제어를 얻고로의 GridView에 gvSession_DataBound 이벤트를 할당 'UpdatePanel에서 트리거에 대해 찾을 수 없습니다'Update ' – Richa

+0

알았어 당신의 컨트롤이 그리드 안쪽에있는 이유가 작동하지 않습니다. –

0

의 끝이 넣고 바인딩 이벤트

+0

e.Row가 해결되지 않았습니다 .. 이걸 넣어 .. foreach (GridViewRow grdrow gvSession.Rows에서) { LinkButton Preview = (LinkButton) grdrow.FindControl ("lbPreview"); ScriptManager.GetCurrent (this) .RegisterAsyncPostBackControl (Preview); } ....................................... 그러나 이것도 작동하지 않습니다 .. 심지어 디버깅을 할 때마다 메토가 호출되고 .. 모든 이유가 없습니다. (:( – Richa