我有一个包含GridView的普通面板的ASP页面。GridView中有一些链接按钮,用于生成PDF。
我还在普通面板内部并且GridView下方添加了一个UpdatePanel,其中包含一个标签。
当用户点击GridView内部的“生成”链接按钮时,我希望该标签显示“正在生成报告”等内容。
但是我一直无法让其正常工作。我可以随意向标签中添加值,但没有效果。
以下是该面板的代码:
我还在普通面板内部并且GridView下方添加了一个UpdatePanel,其中包含一个标签。
当用户点击GridView内部的“生成”链接按钮时,我希望该标签显示“正在生成报告”等内容。
但是我一直无法让其正常工作。我可以随意向标签中添加值,但没有效果。
以下是该面板的代码:
<asp:Panel ID="ReportsPanel" runat="server" Height="611px">
<h2>
Reports
</h2>
<asp:Label ID="ReportsNotification" runat="server"></asp:Label>
<br />
<asp:Label ID="Label1" runat="server" Text="Pharmacy: "></asp:Label>
<asp:DropDownList ID="PharmaciesDropDownList" runat="server" AutoPostBack="true"
OnSelectedIndexChanged="PharmaciesDropDownList_SelectedIndexChanged">
</asp:DropDownList>
<br />
<br />
<asp:GridView ID="ListReportsGridView" runat="server" AllowPaging="true" AllowSorting="true"
GridLines="None" PageSize="10" CssClass="GridView" AutoGenerateColumns="false"
EmptyDataText="No rows for selection." OnRowCommand="ListReportsGridView_RowCommand"
OnPageIndexChanging="ListReportsGridView_PageIndexChanging"
EnablePersistedSelection="True"
DataKeyNames="FinDataID">
<AlternatingRowStyle CssClass="GridViewAltRow" />
<HeaderStyle CssClass="GridViewHeader" />
<RowStyle CssClass="GridViewItem" />
<PagerStyle CssClass="GridViewPager" />
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" ControlStyle-CssClass="Hidden" ItemStyle-CssClass="Hidden"
HeaderStyle-CssClass="Hidden" FooterStyle-CssClass="Hidden" />
<asp:BoundField DataField="FinDataID" HeaderText="FinDataID" ControlStyle-CssClass="Hidden" ItemStyle-CssClass="Hidden"
HeaderStyle-CssClass="Hidden" FooterStyle-CssClass="Hidden" />
<asp:BoundField DataField="PeriodStart" HeaderText="Period Start" DataFormatString="{0:dd/MM/yyyy}" />
<asp:BoundField DataField="PeriodEnd" HeaderText="Period End" DataFormatString="{0:dd/MM/yyyy}" />
<asp:TemplateField HeaderText="Reports Available for Download"><ItemTemplate><asp:LinkButton ID="LinkButtonViewRpt" Text='<%#Eval("FileName") %>' CommandName="ViewRpt" CommandArgument="<%# Container.DataItemIndex %>" runat="server"></asp:LinkButton></ItemTemplate></asp:TemplateField>
<asp:TemplateField Visible="false"><ItemTemplate><asp:LinkButton ID="LinkButtonGenerateRpt" Text='Generate' CommandName="GenerateRpt" CommandArgument="<%# Container.DataItemIndex %>" runat="server"></asp:LinkButton></ItemTemplate></asp:TemplateField>
<asp:TemplateField Visible="false"><ItemTemplate><asp:LinkButton ID="LinkButtonUploadRpt" Text='Upload' CommandName="UploadRpt" CommandArgument="<%# Container.DataItemIndex %>" runat="server"></asp:LinkButton></ItemTemplate></asp:TemplateField>
</Columns>
</asp:GridView>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="LinkButtonGenerateRpt" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:Label ID="lblMessage" runat="server" Text=""></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
<br />
</asp:Panel>
我已经尝试了在UpdatePanel中和在UpdatePanel之外都使用按钮,但这些想法都没有奏效。这肯定是有可能的!
唯一让我感到疑惑的是,在“生成”按钮触发并创建PDF时,它调用了Response.End。我知道这将结束线程并且不会重新加载页面。但我希望在此之前可以刷新UpdatePanel...从我所了解的情况来看,这就是UpdatePanel的作用,进行部分页面更新。
以下是GridView的后台代码:
protected void ListReportsGridView_RowCommand(object sender, GridViewCommandEventArgs e)
{
intIndex = Convert.ToInt32(e.CommandArgument);
if (e.CommandName == "GenerateRpt")
{//render pdf
//populate empty report object with row information
objFileData = new FileData();
objFileData.PharmacyID = Convert.ToInt32(PharmaciesDropDownList.SelectedValue);
objFileData.FinDataID = Convert.ToInt32(ListReportsGridView.Rows[intIndex].Cells[1].Text);
objFileData.CreateDate = Convert.ToDateTime(DateTime.Now);
objFileData.CreatedByID = Convert.ToInt32(Session["UserID"]);
objFileData.PeriodStart = Convert.ToDateTime(ListReportsGridView.Rows[intIndex].Cells[2].Text);
lblMessage.Text = "Report generating...";
//btnGenerate_Click(sender, e);
RenderPdf();
}
提前感谢!
编辑:我还收到了以下错误信息...
在UpdatePanel 'UpdatePanel1'的触发器中找不到ID为'LinkButtonGenerateRpt'的控件。
我需要使用UniqueID吗?还是作用域存在问题?