Ciao a tutti.
Mi trovo nella necessità di dover unificare la header di una gridview per più colonne. I dati della gridview non sono tutti nel database. Alcuni vengono "costruiti" runtime.
Ho una gridview di 24 colonne. Le prime 4 colonne sono singole e i dati relativi sono recuperati direttamente dal database.
Le rimanenti 20 colonne sono raggruppate 2 a 2. In testa ad ogni coppia di colonne c'è la data del giorno (solo il numero, senza mese nè anno) e sotto vi sono due intestazioni m e p.
-----
| 1 |
|m p|
-----
Insomma, così...

Ho utilizzato l'elemento repeater.
Questo è il codice:
codice HTML:
<asp:Repeater ID="RepeaterCalendario" runat="server">
                    <HeaderTemplate>
                        <table width="100%" cellpadding="5">
                            <tr style="font-size: medium">
                                <th colspan="4"></th>
                                
                                <th colspan="2">
                                    <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
                                </th>
                                <th colspan="2">
                                    <asp:Label ID="Label2" runat="server" Text=""></asp:Label>
                                </th>
                                <th colspan="2">
                                    <asp:Label ID="Label3" runat="server" Text=""></asp:Label>
                                </th>
                                <th colspan="2">
                                    <asp:Label ID="Label4" runat="server" Text=""></asp:Label>
                                </th>
                                <th colspan="2">
                                    <asp:Label ID="Label5" runat="server" Text=""></asp:Label>
                                </th>
                                <th colspan="2">
                                    <asp:Label ID="Label6" runat="server" Text=""></asp:Label>
                                </th>
                                <th colspan="2">
                                    <asp:Label ID="Label7" runat="server" Text=""></asp:Label>
                                </th>
                                <th colspan="2">
                                    <asp:Label ID="Label8" runat="server" Text=""></asp:Label>
                                </th>
                                <th colspan="2">
                                    <asp:Label ID="Label9" runat="server" Text=""></asp:Label>
                                </th>
                                <th colspan="2">
                                    <asp:Label ID="Label10" runat="server" Text=""></asp:Label>
                                </th>
                            </tr>
                            <tr>
                                <th colspan="1">
                                    <b>Id</b>
                                </th>
                                <th colspan="1">
                                    <b>Cognome</b>
                                </th>
                                <th colspan="1">
                                    <b>Nome</b>
                                </th>
                                <th colspan="1">
                                    <b>Fino A</b>
                                </th>
                                <th>
                                    m
                                </th>
                                <th>
                                    p
                                </th>
                             </tr>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <tr style="font-size: small">
                            <td>
                                <%# Eval("Id") %>
                            </td>
                            <td>
                                <%# Eval("Cognome") %> 
                            </td>
                            <td>
                                <%# Eval("Nome") %> 
                            </td>
                            <td>
                                <%# Eval("FinoA") %> 
                            </td>
                            <td>
                                <asp:Label ID="Label11" runat="server" Text="Label"></asp:Label>
                            </td>
                            <td>
                                <asp:Label ID="Label12" runat="server" Text="Label"></asp:Label>
                            </td>
                        </tr>
                    </ItemTemplate>
                    <FooterTemplate>
                        </table>
                    </FooterTemplate>
                </asp:Repeater>
codice:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Web;
using System.Web.UI.WebControls;

public partial class DispCal : System.Web.UI.Page
{
.......


protected void RiempiTabella(int gruppogiorni, int mese, int anno)
    {
        elenco = Get.GetCalendar(gruppogiorni, mese, anno, Convert.ToString(Session["CodiceAccesso"]));

        DataTable Tabella = new DataTable();

        int giorno_start = 0;
        int giorno_end = 0;

        if (gruppogiorni == 0)
        {
            giorno_start = 1;
            giorno_end = 10;
        }
        else if (gruppogiorni == 1)
        {
            giorno_start = 11;
            giorno_end = 20;
        }
        else
        {
            giorno_start = 21;

            if (mese == 4 || mese == 6 || mese == 9 || mese == 11)
            {
                giorno_end = 30;
            }
            else if (mese == 2)
            {
                if (anno == 2012 || anno == 2016 || anno == 2020 || anno == 2024 || anno == 2028 || anno == 2032 || anno == 2036)
                {
                    giorno_end = 29;
                }
                else
                {
                    giorno_end = 28;
                }
            }
            else
            {
                giorno_end = 31;
            }
        }

        Tabella.Columns.Add("Id");
        Tabella.Columns.Add("Cognome");
        Tabella.Columns.Add("Nome");
        Tabella.Columns.Add("FinoA");

        DataRow riga = Tabella.NewRow();
                    
        for (int i = giorno_start; i <= giorno_end; i++)
        {
            Tabella.Columns.Add(i + "\r\n" + "m");
            Tabella.Columns.Add(i + "\r\n" + "p");
        }

        foreach (Get.Calendario elem in elenco)
        {
            riga["Id"] = elem.Id;
            riga["Cognome"] = elem.Cognome;
            riga["Nome"] = elem.Nome;
            riga["FinoA"] = elem.FinoA.ToString("d");

            for (int i = 0; i < elem.Matt.Length; i++)
            {
                string TestoDurata;
                if (elem.Matt[i] % 60 == 0)
                {
                    TestoDurata = Convert.ToString(elem.Matt[i] / 60) + ":00";
                }
                else
                {
                    TestoDurata = Convert.ToString(elem.Matt[i] / 60) + ":" + Convert.ToString(elem.Matt[i] % 60);
                }

                int giorno = giorno_start + i;
                riga[giorno + "\r\n" + "m"] = TestoDurata;
            }

            for (int i = 0; i < elem.Pom.Length; i++)
            {
                string TestoDurata;
                if (elem.Pom[i] % 60 == 0)
                {
                    TestoDurata = Convert.ToString(elem.Pom[i] / 60) + ":00";
                }
                else
                {
                    TestoDurata = Convert.ToString(elem.Pom[i] / 60) + ":" + Convert.ToString(elem.Pom[i] % 60);
                }

                int giorno = giorno_start + i;
                riga[giorno + "\r\n" + "p"] = TestoDurata;
                
            }

            Tabella.Rows.Add(riga);
        }

        
        GridViewCalendario.DataSource = Tabella.DefaultView;
        GridViewCalendario.DataBind();
        RepeaterCalendario.DataSource = Tabella.DefaultView;
        RepeaterCalendario.DataBind();
    }
La procedura sopra riportata è relativa alla gridview presente nella pagina e che devo trasformare con il repeater.
Come si vede le colonne relative ai giorni vengono qui aggiunte alla gridview. La visualizzazione che c'è ora riporta il numero del giorno sopra m e sopra p.

Il mio problema principale è che le Label inserite nel repeater NON riesco a "vederle" nel code behind (C#)
Riuscite per favore a darmi una mano? Risolta questa dovrei essere a posto...
Sicuramente è una cavolata, ma io proprio non riesco a vedere dove risiede l'errore...

Grazie a tutti...