RowDataBound, как печатать несколько этикеток

Я пытаюсь рассчитать разницу между двумя датами и хочу показать их в сетке. Я создал таблицу в сетке, и результаты можно распечатать там.

Мой RowDataBound рассчитывает все, но не знаю, как распечатать результаты.

protected void grdADR_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            Label lblADRYear = (Label)e.Row.FindControl("lblADRYear");
            Label lblBRCIDADR = (Label)e.Row.FindControl("lblBRCIDADR");
            DataTable dt = new DataTable();

        string strQuery = "Select ADR_TYPE,DatePART(dayofyear,Document_Date) AS                       DayOfTheYearADR,Document_Date From ADR Where BRCID = '" + lblBRCIDADR.Text.ToString() + "'"
                        + " AND CAST(YEAR(Document_Date) AS VARCHAR(4)) = '" + lblADRYear.Text.ToString() + "' Order by DayOfTheYearADR";

        dt = objAccess.GetDataTable(strQuery);
        if (dt != null)
        {
            if (dt.Rows.Count > 0)
            {
                int DayMarker = 0;
                int LastDay = 0;

                List<Label> labels = new List<Label>();


                for (int rcnt = 0; rcnt < dt.Rows.Count; rcnt++)
                {

                    DataRow dr = dt.Rows[rcnt];
                    Label lblADRTimeLineStart = new Label();
                    lblADRTimeLineStart.ForeColor = System.Drawing.Color.Red;
                    int RowDay = int.Parse(dr["DayOfTheYearADR"].ToString());
                    if (LastDay != RowDay)
                    {
                        Label lblEmptyBlock = new Label();
                        lblADRTimeLineStart.ForeColor = System.Drawing.Color.Blue;
                        lblEmptyBlock.Width = (RowDay - DayMarker) * 3;
                        labels.Add(lblEmptyBlock);


                        Label lblADRBlock = new Label();
                        lblADRTimeLineStart.ForeColor = System.Drawing.Color.Green;
                        lblADRBlock.Width = 3;
                        labels.Add(lblADRBlock);
                        DayMarker = RowDay + 3;

                    }
                    LastDay = RowDay;
                }

            }
        }

    }

}

ASPX файл

<asp:GridView ID="grdADR" runat="server" DataSource='<%# functADRTimeLine(Eval("Month").ToString()) %>'  AutoGenerateColumns="false" ShowHeader="true" AllowPaging="false" Width="1260px" GridLines="Both"
    BorderWidth="0" BorderColor="#839168" BorderStyle="Solid" CellPadding="0" BackColor="white" OnRowDataBound="grdADR_RowDataBound">



    <Columns>
        <asp:TemplateField Visible="false">
            <HeaderTemplate>BRCID</HeaderTemplate>
            <ItemTemplate>
                <asp:Label ID="lblBRCIDADR" runat="server" Text='<%# Bind("BRCID") %>'></asp:Label>
            </ItemTemplate>
            <ItemStyle Width="0px" Wrap="true" BorderColor="black" BorderStyle="Dotted" BorderWidth="1" HorizontalAlign="Center" />
            <HeaderStyle BorderColor="black" BorderStyle="Outset" BorderWidth="1" HorizontalAlign="Center" />
        </asp:TemplateField>
        <asp:TemplateField Visible="false">
            <HeaderTemplate>Year</HeaderTemplate>
            <ItemTemplate>
                <asp:Label ID="lblADRYEAR" runat="server" Text='<%# Bind("ADR_YEAR") %>'></asp:Label>
            </ItemTemplate>
            <ItemStyle Width="0px" Wrap="true" BorderColor="black" BorderStyle="Dotted" BorderWidth="1" HorizontalAlign="Center" />
            <HeaderStyle BorderColor="black" BorderStyle="Outset" BorderWidth="1" HorizontalAlign="Center" />
        </asp:TemplateField>
        <asp:TemplateField>

            <ItemTemplate>
                <table cellpadding="0" cellspacing="0" border="0">

                    <tr>
                        <td style="width: 150px">
                            <%--HERE I WANT TO PRINT MY RESULTS.--%> 
                        </td>

                        <td style="width: 1101px"></td>
                    </tr>
                </table>

            </ItemTemplate>

        </asp:TemplateField>



    </Columns>
    <HeaderStyle Height="25px" HorizontalAlign="Center" BackColor="#a8b194" />
    <RowStyle CssClass="grd_RowStyle" BorderColor="black" BorderStyle="Dotted" BorderWidth="1" Wrap="true" />
</asp:GridView>

1 ответ

Решение

Существует много вариантов печати текста. Один из вариантов будет

Добавьте элемент-заполнитель в том месте, где вы хотите печатать этикетки

<asp:PlaceHolder ID="placeHolderLabels" runat="server"></asp:PlaceHolder>

В коде позади, найдите этот заполнитель, как это

PlaceHolder placeHolderLabels= (PlaceHolder)e.Row.FindControl("placeHolderLabels");

Затем добавьте свои метки в этот элемент управления заполнителем, используя следующий код

placeHolderLabels.Controls.Add(lblEmptyBlock); 
placeHolderLabels.Controls.Add(lblADRBlock);

Другой вариант заключается в том, что, поскольку вы печатаете структуру в виде таблицы, вы можете добавить элемент управления списком данных / сеткой / ретранслятором, где вы хотите печатать этикетки. Затем вы можете привязать свой рассчитанный список к этому элементу управления, который является более чистым

Другие вопросы по тегам