PDA

View Full Version : [C# / Linq]Utilizzare linq su "Controls"


RaouL_BennetH
22-10-2010, 21:49
Ciao a tutti :)

Volevo sapere come posso utilizzare (se si può) Linq su oggetti non legati ad una sorgente dati, per esempio una datagridview, una listview o altro.

Ciò che vorrei provare a fare è una cosa del genere:



//senza Linq

foreach(DataGridViewRow row in grid.Rows)
{
if(r.Cells[1].Value == someValue)
faiQualcosa();
}



Si può fare ? O meglio, Linq si può utilizzare anche in assenza di 'sorgente dati' ?

Grazie mille :)

RaouL.

EDIT: :doh:

dimenticavo:

sto provando in questo modo:



var result = from res in this.Controls.OfType<myGrid>().AsEnumerable().Where(grid => grid[colIndex, rowIndex].Value == "prova")
select res[colIndex, rowIndex].Value;

Kralizek
22-10-2010, 22:13
grid.Rows.OfType<DataGridViewRow>().Where( r => r.Cells[1].Value == someValue).ForEach( r => faiQualcosa(r));

dove l'ultimo ForEach è un extension method così definito:


public static class Exts
{
public static void ForEach<T>(this IEnumerable<T> seq, Action<T> command)
{ foreach(T item in seq) command(item); }
}

RaouL_BennetH
22-10-2010, 23:04
dove l'ultimo ForEach è un extension method così definito:


public static class Exts
{
public static void ForEach<T>(this IEnumerable<T> seq, Action<T> command)
{ foreach(T item in seq) command(item); }
}


:ave: Kralizek :)

Il mio problema è questo:

ho una griglia dalla quale devo prelevare e trattare i valori in questo modo:

se il valore corrispondente alla colonna 9, per qualsiasi riga è True, devo prelevare i valori delle celle 2,3,4,5,6 per ciascuna riga verificata;

se invece è settato a True il valore della colonna 10, per ciascuna riga, devo prelevare il contenuto della cella 8.

Mi piacerebbe farlo con i "nuovi mezzi" perchè attualmente c'è una catena di "IF" che mi crea gli incubi solo a guardarla.....:(

RaouL_BennetH
22-10-2010, 23:47
Su msdn ho trovato anche un'altra soluzione:



var test = this.Controls.OfType<DataGridView>()
.TakeWhile<DataGridView>(r => r.Rows[x].Cells[y].Value == someValue);

foreach(var prova in test)
{
faiQualcosa(prova);
}