0

テンプレート フィールドを含むグリッド ビューがあり、それにデータをバインドできます。グリッド ビューには、選択したそれぞれの行データをレポートに出力するためのコマンド フィールド (選択) もあります。テンプレート フィールドをバインド フィールドにすると、GridView_SelectedIndexChanged()メソッドが正常に動作します。ただし、テンプレート フィールドをそのままにしておくことで同じ機能が必要です (バインド フィールドに変更しないでください)。

私のグリッドビューは

<asp:GridView ID="dgvGeneralBillList" runat="server" style="font-size:11px;margin:0px auto auto 30px;width:auto;" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" OnSelectedIndexChanged="dgvGeneralBillList_SelectedIndexChanged">
            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
            <Columns>            
                <asp:TemplateField HeaderText="Bill ID">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("BillID") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="lblBillID" runat="server" Text='<%# Bind("BillID") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Bill No">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("SerialNo") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="lblSerialNo" runat="server" Text='<%# Bind("SerialNo") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Billed Week">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("BilledWeekNo") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="lblBilledWeekNo" runat="server" Text='<%# Bind("BilledWeekNo") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Billed Date">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("BilledWeekDate") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="lblBilledWeekDate" runat="server" Text='<%# Bind("BilledWeekDate") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Amount">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox5" runat="server" Text='<%# Bind("Amount") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="lblAmount" runat="server" Text='<%# Bind("Amount") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Bill Status">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox6" runat="server" Text='<%# Bind("BillStatus") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="lblBillStatus" runat="server" Text='<%# Bind("BillStatus") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:CommandField SelectText="print" ShowSelectButton="True" />
            </Columns>
            <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
            <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <EditRowStyle BackColor="#999999" />
            <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
        </asp:GridView>

そして機能は

protected void dgvGeneralBillList_SelectedIndexChanged(object sender, EventArgs e)
    {
        clsBill[] oBillList = new clsBill[1];
        clsBill oBill = new clsBill();
        //oBill.BillID = Convert.ToDouble(dgvGeneralBillList.SelectedRow.Cells[0].Text.ToString());
        oBill.BillID = Convert.ToDouble(dgvGeneralBillList.SelectedRow.FindControl("lblBillID").ToString());
        oBillList[0] = oBill;

        if (oBillList.Length < 1)
        {
            lblMessage.Text = "Error : No Bill Entry found";
            return;
        }

        BLBill oBLBill = new BLBill();
        string sErrorMessage = string.Empty;
        Object oOutput = oBLBill.Execute((int)BOCollectionType.ACTION_BILL.ACTION_BILL_GET_SINGLE_REPORT, oBillList, ref sErrorMessage);
        DSBillReport oDSBillReport = new DSBillReport();

        if (sErrorMessage != "")
        {
            lblMessage.Text = sErrorMessage;
            return;
        }
        else
        {
            oDSBillReport = (DSBillReport)oOutput;
            if (oDSBillReport.BillReport.Rows.Count > 0)
            {
                Session["GeneralBill"] = oDSBillReport;
                Session["MedicalBill"] = null;
                Response.Redirect("frmReportHolder.aspx");
            }
        }

        return;
    }

助けてください !

4

1 に答える 1

0

さて、この質問の非常に簡単な解決策のように見えます。ここに私が現在使用しているコードがあります。SelectedRowGridViewRowとして型キャストし、必要なLabel新しい Label オブジェクト(try...catchブロック内)に型キャストするだけです。これはこれまでのところうまくいきました。みんなありがとう。

protected void dgvGeneralBillList_SelectedIndexChanged(object sender, EventArgs e)
    {
        clsBill[] oBillList = new clsBill[1];
        clsBill oBill = new clsBill();

        try
        {
            GridViewRow oGridRow = (GridViewRow)dgvGeneralBillList.SelectedRow;
            Label lblID = (Label)oGridRow.FindControl("lblBillID");
            oBill.BillID = Convert.ToDouble(lblID.Text.ToString());
        }
        catch (Exception ex)
        { 

        }

        oBillList[0] = oBill;

        if (oBillList.Length < 1)
        {
            lblMessage.Text = "Error : No Bill Entry found";
            return;
        }

        BLBill oBLBill = new BLBill();
        string sErrorMessage = string.Empty;
        Object oOutput = oBLBill.Execute((int)BOCollectionType.ACTION_BILL.ACTION_BILL_GET_SINGLE_REPORT, oBillList, ref sErrorMessage);
        DSBillReport oDSBillReport = new DSBillReport();

        if (sErrorMessage != "")
        {
            lblMessage.Text = sErrorMessage;
            return;
        }
        else
        {
            oDSBillReport = (DSBillReport)oOutput;
            if (oDSBillReport.BillReport.Rows.Count > 0)
            {
                Session["GeneralBill"] = oDSBillReport;
                Session["MedicalBill"] = null;
                Response.Redirect("frmReportHolder.aspx");
            }
        }

        return;
    }
于 2012-05-17T10:26:33.970 に答える