Problema ordinamento campi

sabato 03 gennaio 2009 - 12.07

squilibrio Profilo | Expert

I've a gridview... I load some rows and I check all rows inserted for verify if I've all row in my gridview

Ciao a tutti, ho un gridview con una serie di righe, che devo raggruppare tramite subtotali. Dato che caricando i dati dal DB potrei non avere specifiche righe non posso generare i subtotali partendo da posizioni fisse delle righe (alcune potebbero non esserci in specifiche situazioni) quindi faccio un check ed itero tutte le rows per ricostruire la struttura necessaria.... quindi aggiungo specifiche righe qualora non siano presenti (ovviamente con tutti valori impostati a zero) ... le creo solo per gestire poi le varie posizioni, sicuro che il gridview ha sempre X righe ed alla posizione X-2, X-1... ho sempre gli stessi elementi

il problema è che dopo aver inserito gli elementi ed averli ordinati (l'ordine è importante per sapere di avere sempre le righe nella stessa posizione)

dv = new DataView(dsElenco.Tables[0]);
dv.Sort="Ordine"
gwElenco.DataSource = CalcolaTotali(dv); //dv;
gwElenco.DataBind();

l'ordine non sembra essere corretto ed il metodo che calcola i subtotali CalcolaTotali() in alcuni casi recupera le righe sbagliate (immagino per problemi nell'ordinamento)

Cosa sbaglio??


// *****************************************************************************************************************
/// <summary>
/// Verifica la struttura e ricrea righe con colonne a zero se mancano
/// </summary>
// *****************************************************************************************************************
private void Verify()
{
//Elementi recuperati dal DB
dsElenco = msnHelper.DataHelper.GetFlussi(sqlConnection, ddlAnno.SelectedValue);
//for each record I have, name of the row, order/position for sort the rows, 12 column... one for each month

DataView dv;

//Viene aggiornato il DataSet locale aggiungendo eventuali righe mancanti
if (dsElenco.Tables[0].Rows.Count > 0)
{
int controllo = 0;

//Cerco la riga tra quelle della griglia
for(int i=0; i<dsElenco.Tables[0].Rows.Count-1; i++)
{
if(dsElenco.Tables[0].Rows[i][0].ToString() == "Saldo AA" )
controllo = 1;
}
if (controllo == 0)
CreaRiga("Saldo BIBOP", "10"); // 10 is the position for sort the row


for(int i=0; i<dsElenco.Tables[0].Rows.Count-1; i++)
{
if(dsElenco.Tables[0].Rows[i][0].ToString() == "Saldo BB" )
controllo = 1;
}
if (controllo == 0)
CreaRiga("Saldo ANTONVENETA", "20"); // 20 is the position for sort the row


controllo = 0;
for(int i=0; i<=dsElenco.Tables[0].Rows.Count-1; i++)
{
if(dsElenco.Tables[0].Rows[i][0].ToString() == "Sconto Fatture AA" )
controllo = 1;
}
if (controllo == 0)
CreaRiga("Sconto Fatture BIBOP", "100"); // 100 is the position for sort the row


controllo = 0;
for(int i=0; i<=dsElenco.Tables[0].Rows.Count-1; i++)
{
if(dsElenco.Tables[0].Rows[i][0].ToString() == "Sconto Fatture BB" )
controllo = 1;
}
if (controllo == 0)
CreaRiga("Sconto Fatture ANTONVENETA", "105"); // 105 is the position for sort the row



....



controllo = 0;
for(int i=0; i<=dsElenco.Tables[0].Rows.Count-1; i++)
{
if(dsElenco.Tables[0].Rows[i][0].ToString() == "Iva Credito" )
controllo = 1;
}
if (controllo == 0)
CreaRiga("Iva Credito", "240"); // 240 is the position for sort the row

....



controllo = 0;
for(int i=0; i<=dsElenco.Tables[0].Rows.Count-1; i++)
{
if(dsElenco.Tables[0].Rows[i][0].ToString() == "Rimborso Spese" )
controllo = 1;
}
if (controllo == 0)
CreaRiga("Rimborso Spese", "280");

....

}

// I sort all rows for obtain the order that I've to use for insert the subtotals

dv = new DataView(dsElenco.Tables[0]);
dv.Sort="Ordine";
gwElenco.DataSource = CalcolaTotali(dv); //dv;
gwElenco.DataBind();
}


// *****************************************************************************************************************
/// <summary>
/// Calcola i subtotali
/// </summary>
// *****************************************************************************************************************
private DataView CalcolaTotali(DataView dv)
{
dv.Sort="Ordine";

if (dv.Table.Rows.Count > 0) //(dsElenco.Tables[0].Rows.Count > 0)
{

//Total A
dr = dv.Table.NewRow();
dr[0] = "Total A";
dr[1] = "290";
//Mesi
for(int i=2; i<=13; i++)
{
//dr[i] = Convert.ToString(Convert.ToDecimal(dv.Table.Rows[6][i])+Convert.ToDecimal(dv.Table.Rows[7][i])+Convert.ToDecimal(dv.Table.Rows[8][i])+Convert.ToDecimal(dv.Table.Rows[9][i])+Convert.ToDecimal(dv.Table.Rows[10][i])+Convert.ToDecimal(dv.Table.Rows[11][i])+Convert.ToDecimal(dv.Table.Rows[12][i])+Convert.ToDecimal(dv.Table.Rows[13][i])+Convert.ToDecimal(dv.Table.Rows[14][i]));

}
dv.Table.Rows.Add(dr);



//Total XX
dr = dv.Table.NewRow();
dr[0] = "Total XX";
dr[1] = "320";
//Mesi
for(int i=2; i<=13; i++)
{
//dr[i] = Convert.ToString(Convert.ToDecimal(dv.Table.Rows[15][i])+Convert.ToDecimal(dv.Table.Rows[16][i])+Convert.ToDecimal(dv.Table.Rows[17][i])+Convert.ToDecimal(dv.Table.Rows[18][i]));

}
dv.Table.Rows.Add(dr);



//Total YY
dr = dv.Table.NewRow();
dr[0] = "otal YY";
dr[1] = "550";
//Mesi
for(int i=2; i<=13; i++)
{
//dr[i] = Convert.ToString(Convert.ToDecimal(dv.Table.Rows[21][i])+Convert.ToDecimal(dv.Table.Rows[22][i])+Convert.ToDecimal(dv.Table.Rows[23][i])+Convert.ToDecimal(dv.Table.Rows[24][i]));

}
dv.Table.Rows.Add(dr);
}

return dv;
}




// *****************************************************************************************************************
/// <summary>
/// Crea una riga fittizia con tutte colonne impostate a zero
/// </summary>
// *****************************************************************************************************************
private void CreaRiga(String Nome, String Ordine)
{
DataRow dr = dsElenco.Tables[0].NewRow();
dr[0] = Nome; //Name of the row
dr[1] = Ordine; //for sort the rows
//Mesi
for(int i=2; i<=25; i++)
{
dr[i] = "0,00"; //all columns set to zero
}
dsElenco.Tables[0].Rows.Add(dr);
}


Grazie mille per l'aiuto!!!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5