Popolare una tabella con for loop da un altro for loop

di il
3 risposte

Popolare una tabella con for loop da un altro for loop

Salve a tutti, sto cercando di popolare un for loop in una view che si trova dentro un altro for loop mi spiego meglio, ho scritto questo codice:
    <table border="0" cellpadding="0" cellspacing="0" id="listino" class="small my-3">
        @*INIZIO INTESTAZIONE*@
        <thead>
            <tr>
                @*Colonna Numero Giorno del Mese*@
                <th class="col-s border text-left"><strong>Giorno</strong></th>
                @for (int g = 0; g < DateTime.DaysInMonth(Model.First().Anno, Model.First().Mese); g++)
                {
                        <th class="col-m border text-center">
                            <span style="text-align:center; width: 35px" id="HEADER_0_@(g)" data-item-index="-1" data-value-type="HEADER" data-value-index="@g">@(g + 1)</span>
                        </th>
                }
                @*Colonna Totali Presenze*@
                <th colspan="9" class="border" style="text-align: center;">Totali Presenze</th>
            </tr>
        </thead>
        @*FINE INTESTAZIONE*@

        @*INIZIO Corpo Presenze Listino*@
        <tbody>
            @*Inizio Ciclo Dipidenti*@
            @for (var OrdineDip = 0; OrdineDip < Model.Count(); OrdineDip++)
            {
                @*Riga 1 *@
                <tr>
                    @*Vuota OK*@
                    <td class="col-m">
                        <a></a>
                    </td>
                    @*Dati Dipendente*@
                    <th colspan="2" class="col-m border"><strong>Matricola</strong></th>
                    <td colspan="2" class="col-m border">@Model[OrdineDip].Matricola</td>
                    <td colspan="3" class="col-m border"><strong>Dipendente</strong></td>
                    <td colspan="10" class="col-m border">@Model[OrdineDip].Cognome @Model[OrdineDip].Nome</td>
                    <td colspan="3" class="col-m border"><strong>Codice Fiscale</strong></td>
                    <td colspan="4" class="col-m border">@Model[OrdineDip].CodiceFiscale</td>
                    <td colspan="2" class="col-m border"><strong>Qualifica</strong></td>
                    <td colspan="1" class="col-m border text-center">@Model[OrdineDip].Qualifica</td>
                    <td colspan="3" class="col-m border"><strong>Cb Qualifica</strong></td>
                    <td colspan="1" class="col-m border text-center">@Model[OrdineDip].CbQualifica</td>
                </tr>

                @*Riga 2 *@
                <tr>
                    @*Ore Ordinarie*@
                    <td class="col-m text-align:left"><strong>H. Ord.</strong></td>

                    @for (int g = 0; g < DateTime.DaysInMonth(Model.First().Anno, Model.First().Mese); g++)
                    {
                            <td class="text text-center">
                                <input style=" width: 35px" type="text" maxlength="4"
                                       id="PrOrd_@(OrdineDip)_@(g)" data-item-index="@OrdineDip" data-value-type="PrOrd" data-value-index="@g" />
                            </td>
                    }
                </tr>
            }
            @*Fine Ciclo Dipendenti*@
        </tbody>
    </table>
e così ho questa view
[img]
https://www.iprogrammatori.it/forum-programmazione/download/file.php?mode=view&id=4911

ora vorrei popolare le presenze prendendo i dati da un tabella di questo genere:
[img]
https://www.iprogrammatori.it/forum-programmazione/download/file.php?mode=view&id=4912&sid=d846fd52462beef36bec1a44ee014e18
ma mi sono arenato, ho impostato questo codice guardando un pò in giro

 <td class="text text-center">
	<input style=" width: 35px" type="text" maxlength="4"
        id="PrOrd_@(OrdineDip)_@(g)" data-item-index="@OrdineDip" data-value-type="PrOrd" data-value-index="@g" />
 </td>
ma ora mi sono bloccato, non capisco come popolare questo loop con i dati che ho.
credo che la cosa giusta da fare sia popolare il loop tramite javascript, ma le mie conoscenze sono molto limitate, mi potreste dare qualche aiuto per poter impostarla, o magari indirizzarmi nella strada giusta??
grazie mille
Allegati:
23890_a7ee52dbeff2e8c8d9c866a57a27b370.jpg
23890_a7ee52dbeff2e8c8d9c866a57a27b370.jpg

23890_a62bfe63f4a489d756d597356f714bf6.jpg
23890_a62bfe63f4a489d756d597356f714bf6.jpg

3 Risposte

  • Re: Popolare una tabella con for loop da un altro for loop

    eternityck" post_id="8684072 ha scritto:


    sto cercando di popolare un for loop in una view che si trova dentro un altro for loop mi spiego meglio, ho scritto questo codice [...]
    Do per scontato che la tua vista generi le tabelle basandosi su uno specifico Model, da cui estrai i dati per inserirli all'interno delle celle.

    Se così è, renderei quel modello più efficace per supportare la vista durante la generazione.

    Mi spiego peggio. Se la tabella che hai mostrato rispecchia il modo in cui sono organizzati i dati, costruisci dei metodi nel tuo oggetto ViewModel che, dato un contesto (es. dipendente e giorno) ti restituiscano le informazioni di cui hai bisogno in uno specifico punto.

    Detta in un altro modo, crea un template di come la vista deve mostrare i dati nella pagina, poi inserisci il codice necessario per eseguire i cicli che ti interessano, e in ogni punto in cui devi mostrare qualcosa, va a invocare un metodo dell'oggetto passato come ViewModel che - usando i parametri specifici in ingresso - ti restituisca il dato da mostrare sulla pagina.

    In breve, sfrutti il Model per implementare quella logica che sarebbe complesso inserire nella vista direttamente.

    eternityck" post_id="8684072 ha scritto:


    credo che la cosa giusta da fare sia popolare il loop tramite javascript [...]
    Non vedo a che ti serva JavaScript in questo frangente.

    Ciao!
  • Re: Popolare una tabella con for loop da un altro for loop

    Ciao Alka, grazie per la risposta, anche se ho capito ben poco....
    io ho due tabelle con i relativi viewmodel, in una ho i dati generali del dipendente ed in un altra le presenze e le relaziono tramite in codice univico. nella view la viewmodel collegata è quella della tabella con i dati generali senza le presenze. e volevo popolare il ciclo delle presenze con un altra tabella quella appunto della presenza.
  • Re: Popolare una tabella con for loop da un altro for loop

    eternityck ha scritto:


    io ho due tabelle con i relativi viewmodel
    Se non ho capito male, stavi parlando di una vista, quindi ogni View si basa su un singolo e solo ViewModel, non su due.

    Il concetto è mettere nello stesso ViewModel tutti i dati che servono alla vista, quindi sia i dati generali dei dipendenti sia le loro presenze.

    Se è necessario scrivere logica per agevolare la loro estrazione, ad esempio le presenze relative a uno specifico dipendente, questa logica va inserita sempre e comunque nel ViewModel, magari implementato come metodo che dato un dipendente restituisce tutte le sue presenze.

    Gli oggetti che rappresentano dipendenti e presenze potrebbero non essere quelli tipici della "business logic", ossia le entità con i dati usati altrove nel progetto, ma oggetti specifici creati appositamente per l'uso all'interno del ViewModel, con dati in più oppure con una struttura diversa ma congeniale alla disposizione all'interno della vista.

    Ciao!
Devi accedere o registrarti per scrivere nel forum
3 risposte