4

グリッドビューを含む通常のパネルを含む ASP ページがあります。グリッドビューには、pdf の生成に使用されるリンクボタンがいくつかあります。

また、通常のパネル内とラベルを含むグリッドビューの下に UpdatePanel があります。

ユーザーがグリッドビュー内の「生成」リンクボタンをクリックすると、ラベルに「レポート生成」などと表示されます。

私はこれをまったく機能させることができませんでした。私は一日中ラベルに価値を投げ込むことができますが、何もしません。

パネルのコードは次のとおりです。

<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 のボタンを試してみましたが、どちらのアイデアも機能しませんでした。確かにこれは可能です!

私が疑問に思っていることの 1 つは、「生成」ボタンが起動し、Response.End を呼び出している pdf を作成するときです。これによりスレッドが終了し、ページがリロードされないことはわかっています。しかし、これが発生する前に UpdatePanel を更新できることを望んでいました... UpdatePanel が部分的なページ更新のためのものであることがわかります。

グリッドビューのコード ビハインドは次のとおりです。

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();

    }

前もって感謝します!

編集:そして、私もこのエラーを受け取っています...

ID が「LinkBut​​tonGenerateRpt」のコントロールが、UpdatePanel「UpdatePanel1」のトリガーで見つかりませんでした。

UniqueID を使用する必要がありますか、それともスコープは問題ですか?

4

2 に答える 2

4

updatepanelUpdateMode は条件付きであり、更新を自分でトリガーする必要があるため、更新する必要がある場合は、UpdatePanel1.Update();

于 2013-10-18T05:14:35.030 に答える