CONFRONTO DI DATI FRA DUE DATAGRID VS2005 C#

giovedì 18 settembre 2008 - 22.17

LUNA Profilo | Junior Member

Salve vorrei chiedere un'aiuto!!
Dovrei confrontare l'ugualianza fra due dati (nomi di clienti) presenti in due dataGrid diversi
while (k <= N & z <= M)
{
while (clusterGrid.Rows[k].Cells[z] != ResultGrid.Rows[i].Cells[0])
{
i++; //scorro le righe finchè non trovo il cliene nella seconda tabella
}
facendo così però mi da errore quando facio partire il programma: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
Qualcuno mi sa dire il perchè??
GRAZIE MILLE!!

aiedail92 Profilo | Expert

Ciao

Scusa, prova a inserire il codice completo. A me così ad esempio non convincono quei <=, generalmente se hai il numero di elementi di una matrice, devi usare <, perchè le matrici hanno base zero. Comunque così potrebbe essere uno qualsiasi degli accessi: Rows[k], Cells[z], Rows[i]

Luca

LUNA Profilo | Junior Member

OK, provo a inserire il codice completo!!Non l'ho fatto perchè non volevo scrivere un post tr lungo!I dataGrid mi aprono due diversi file excell.
private void button3_Click(object sender, EventArgs e)
{
int N = clusterGrid.RowCount;//conto il numero di elementi di ogni cluster
int M = ResultGrid.RowCount;//conto il num di clienti
int veicolo_riempito = 0;
int i = 1;
int k = 1;
int j = 1;
int z = 1;

while (k <= N & z <= M)
{

//trovo nella tabella dei clienti il nome del cliente per risalire al suo ordine
while (clusterGrid.Rows[k].Cells[z] != ResultGrid.Rows[i].Cells[0])
{
i++;//scorro le righe finchè non trovo il cliene del cluster
//nonmetto i<di un max, perchè per forza lo deve trovare
}

// controllo se l'ordine del cliente non è maggiore della capacitàdi ogni singolo veicolo
if (Convert.ToInt16(ResultGrid.Rows[i].Cells[4].Value) <= Convert.ToInt16(textBox3.Text))
{
//creo una variabile veicolo_riempito in cui tengo conto di quanto riempio ogni singolo veicolo con i diversi ordini
veicolo_riempito += Convert.ToInt16(ResultGrid.Rows[i].Cells[4].Value);
resultGrid2.Rows[i].Cells[2].Value = j;
if (veicolo_riempito > Convert.ToDouble(textBox3.Text))
{
//se il veicolo è pieno ne prendo un altro
veicolo_riempito = 0;
//metto nella tabella dei veicoli il numero del veicolo ch elo serve
resultGrid2.Rows[i].Cells[2].Value = j + 1;
j++;
}
//se l'ordine di un cliente è maggiore della capacità di un veicolo, me lo visualizza a schermo
Console.WriteLine("ORDINE MAGGIORE DELLA CAPACITà DEL SINGOLO VEICOLO");
//vado avanti con il secondo cliente dello stesso cluster
k++;
//se il cluster ha esaurito i clienti allora passo al secondo cluster
if (k > N)
{
k = 0;
z++;
}
}
Ti ringrazio tanto!

aiedail92 Profilo | Expert

Come ho detto prima, probabilmente l'errore deriva dal fatto che cerchi di accedere ad una matrice (clusterGris.Rows) come se i suoi elementi venissero numerati a partire da uno. Invece gli elementi hanno indice di base 0, quindi i valori apprezzabili vanno da 0 a <numero elementi> - 1, ed è per questo che viene generato l'errore. Ti ho riscritto il codice per renderlo più efficiente e leggibile, credo anche che mancasse un else:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Luca

LUNA Profilo | Junior Member

Non ho parole per ringraziarti!!!
Sei stato a dir poco gentilissimo!!!!!

Grazie ancora!!!
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5