708 messaggi dal 11 febbraio 2013
l'unico modo che ho trovato per contare le proprietà dentro l'array
dopo la chiamata ajax è

var properties = Array.from(result);
                  console.log(Object.keys(properties[0]).length)


ma è corretto ?

dovrei poter testare se un determinato anno cè ...come faccio ?
Modificato da jjchuck il 27 giugno 2018 18.50 -
708 messaggi dal 11 febbraio 2013
Ok per accedere alla proprietà debbo fare cosi
 <td>${el['2004']}<td>


ma per testare quali anni sono presenti e creare al volo una tabella come faccio?

debbo fare una mega funzione?
11.052 messaggi dal 09 febbraio 2002
Contributi
Potresti enumerare le proprietà presenti nell'oggetto e vedere quali sono numeriche.

Dato un oggetto come il seguente:
var el = { 'linea': 'PL1', '2004': 1000, '2005': 1214, '2006': 800 };


Puoi enumerare le sue proprietà in questo modo:
for (var prop in el) {
  if(!isNaN(prop)) {
    //è numerica, quindi è un anno.
    console.log("Trovato l'anno " + prop + " con valore " + el[prop]);
  }
}


Comunque, il mio consiglio è di non fare autodetect in questo modo. Dal server ti puoi far restituire anche una proprietà che descriva la forma del risultato. Ad esempio, se il server ti restituisse questo oggetto JSON...
{
  "shape": { "years": [2004, 2005, 2006] },
  "results": [
    { "linea": "PL1", "2004": 1000, "2005": 1214, "2006": 800 },
    { "linea": "PL2", "2004": 2000, "2005": 914, "2006": 850 }
  ]
}


Come vedi, la proprietà shape descrive quali sono gli anni inclusi nei risultati. Per te sarà facile generare quella proprietà shape perché gli anni lato server tu li conosci, infatti li usi nella query e quindi li puoi anche mettere nel JSON che restituisci al client.

ciao,
Moreno
Modificato da BrightSoul il 27 giugno 2018 20.57 -

Enjoy learning and just keep making
708 messaggi dal 11 febbraio 2013
ok ma come faccio a ritornare il json con la proprietà che tiene gli anni
da qui


public IHttpActionResult GetOrdiniByAnnoLinea(string codcli)
        {
                 
            var anni = String.Join(",", db.ORDINI.Where(i=>i.Codcli==codcli).Select(i => i.Anno).Distinct().AsEnumerable().Select(y => new
            {
                anno = $"[{y}]"
            })).Replace("{", "").Replace("}", "").Replace("anno", "").Replace("=", "");

            DataTable pivot = new DataTable();
            SqlDataAdapter adapter = new SqlDataAdapter();
            using (SqlConnection conn = new SqlConnection(GetConn()))
            {
                using (conn)
                {
                    conn.Open();

                    SqlCommand cmd = new SqlCommand {CommandType = CommandType.Text, Connection = conn};
                   
                    cmd.Parameters.Add(new SqlParameter("@codcli", codcli));
                    cmd.CommandText = "SELECT * FROM " +
                                      " ( " +
                           ...
                                      " PIVOT( " +
                                      "     SUM(Importo) FOR anno IN(" + anni + ") " +
                                      "     )  pvt ";

                    adapter.SelectCommand = cmd;
                    adapter.Fill(pivot);
                }
            }
            
            return Ok(pivot);
        }


Poi ti lascio vedere anche te il brasile :)
11.052 messaggi dal 09 febbraio 2002
Contributi
Anziché restituire il DataTable, restituisci un altro oggetto che contenga due proprietà:
  • Results, di tipo DataTable;
  • Years, di tipo int[] o string[], in base a quello che ti fa più comodo;


Puoi farlo anche senza creare una classe, cioè usando un tipo anonimo:
return Ok(new { Results = pivot, Years = db.ORDINI.Where(i=>i.Codcli==codcli).Select(i => i.Anno).Distinct().ToArray() });

Enjoy learning and just keep making
708 messaggi dal 11 febbraio 2013
che fatica...2 ore

ma che soddisfazione :)



success: function (response) {
                  console.log(response);

                  let table = `<table id='tableOrdini' class='table-bordered table-striped'>
                               `;

                  const thead = `<thead>
                                   <th>linea<th>
                                   ${response.years.map(y => `<th>${y.anno}</th>`).join('')}
                                 </thead>`;

                  table += thead;
                 
                  const tbody = `<tbody>
                                  ${response.results.map(r => `<tr>
                                                                  <td>${r.linea}<td>
                                                               ${response.years.map(y => ` 
                                                                  <td>${formatNumber(r[y.anno])}</td>
                                                                                         `).join('')}
                                                               </tr>`).join('')}
                                 </tbody>
                                 `;
                  table += tbody;
                
                  table += `</table>`;

                  $("#pivotTable").append(table);
              }

Modificato da jjchuck il 28 giugno 2018 11.51 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.