Tengo una vista de cuadrícula con campos de plantilla y puedo vincular datos en ella. En mi vista de cuadrícula también tengo un campo de comando (Seleccionar) para imprimir los datos de la fila seleccionada respectiva en un informe. cuando convertí los campos de la plantilla en un campo enlazado, el método GridView_SelectedIndexChanged () funciona correctamente. Pero necesito la misma funcionalidad manteniendo los campos de la plantilla como están (sin cambiar a Bound Field).

Mi vista de cuadrícula es

<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>

Y la función es

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;
    }

Por favor ayuda !

0
vpv 17 may. 2012 a las 10:39
Me quedé atrapado con eso. Cualquier tipo de consejo / ayuda es muy apreciado.
 – 
vpv
17 may. 2012 a las 13:46

1 respuesta

La mejor respuesta

Bueno, parece una solución bastante simple de esta pregunta. Aquí está el código que estoy usando actualmente. Solo escribo transmitir SelectedRow como GridViewRow y luego escribo transmitir la Etiqueta requerida en un nuevo objeto Etiqueta (dentro el bloque try...catch). Esto funcionó para mí hasta ahora. Gracias a todos.

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;
    }
0
vpv 17 may. 2012 a las 14:26
Usando arriba, puedo obtener el valor de la casilla de verificación, cuadro de texto, calendario, etc.
 – 
vpv
21 may. 2012 a las 08:41