Benutzer mit den meisten Antworten
Wie zwei verschachtelte for-Schleifen durch LINQ-Ausdruck ersetzen?

Frage
-
Hallo,
nochmals eine Frage zu LINQ.
Ich will in einem DataGridView ermitteln, welche Zellen selektiert sind und dies nach dem Prinzip:
erst alle Zeilen (beginnend mit dem kleinsten Zeilenindex) und den darin enthaltenen Spalten (beginnend mit dem kleinsten Zeilenindex) durchlaufen.
Für die weitere Funktionalität ist dies wichtig. Die folgenden beiden for-Schleifen erzeugen genau
das gewünschte Resultat.
Mit dataGridView.SelectedCells erhalte ich auch die selektierten Zellen, aber in einer beliebigen Reihenfolge.
Deshalb nutze ich dies nicht.Wie kann ich diese beiden verschachtelten for-Schleifen durch einen einen LINQ-Ausdruck ersetzen und erhalte die Ergebnisse in einer Liste?
List<string> cells = new List<string>();for (int r = 0; r < dataGridView.Rows.Count; r++)
{
for (int c = 0; c < dataGridView.Columns.Count; c++)
{
// if user selected cell
if (dataGridView.Rows[r].Cells[c].Selected == true)
{
Console.WriteLine("Zeile: {0} Spalte: {1}", dataGridView.Rows[r].Index, dataGridView.Columns[c].Index);
cells.Add(String.Format("{0},{1}", dataGridView.Rows[r].Index, dataGridView.Columns[c].Index));
}
}
}
List<string> cells = dataGridView.Rows.Cast<DataGridViewRow>().Where( ???Alexander
Antworten
-
List<string> cells =
(from row in dataGridView.Rows.Cast<DataGridViewRow>()
from cell in row.Cells.Cast<DataGridViewCell>()
where cell.Selected
select string.Format("{0},{1}", row.Index, cell.ColumnIndex)).ToList();
MVP Data Platform Development My blog
- Bearbeitet Martin Honnen Sonntag, 13. November 2011 12:27 Korrektur
- Als Antwort markiert AlexanderRi Sonntag, 13. November 2011 16:09
Alle Antworten
-
List<string> cells =
(from row in dataGridView.Rows.Cast<DataGridViewRow>()
from cell in row.Cells.Cast<DataGridViewCell>()
where cell.Selected
select string.Format("{0},{1}", row.Index, cell.ColumnIndex)).ToList();
MVP Data Platform Development My blog
- Bearbeitet Martin Honnen Sonntag, 13. November 2011 12:27 Korrektur
- Als Antwort markiert AlexanderRi Sonntag, 13. November 2011 16:09
-
Als Anmerkung noch, wenn man die "from"-Variablen typisiert, dann braucht man den Cast<...>-Aufruf nicht, also mit der (ohnehin verwendeten) Query-Syntax ist folgendes etwas kompakter:
List<string> cells =
(from DataGridViewRow row in dataGridView.Rows
from DataGridViewCell cell in row.Cells
where cell.Selected
select string.Format("{0},{1}", row.Index, cell.ColumnIndex)).ToList();
MVP Data Platform Development My blog