如何使用foreach以相反的顺序访问DataGridView.SelectedRows?
哪一个更好的foreach或在C#中循环?
如果我选择多行,下面的代码片段会以相反的顺序给出行。
public static DataTable GetSelectedData(DataGridView dgv)
{
DataTable selectedData = new DataTable();
foreach (DataGridViewColumn col in dgv.Columns)
{
selectedData.Columns.Add(col.Name, col.ValueType != null ? col.ValueType : typeof(string));
}
foreach (DataGridViewRow selectedRow in dgv.SelectedRows)
{
var dtRow = selectedData.NewRow();
for (int i1 = 0; i1 < dgv.Columns.Count; i1++)
dtRow[i1] = (selectedRow.Cells[i1].Value == null ? DBNull.Value : selectedRow.Cells[i1].Value);
selectedData.Rows.Add(dtRow);
}
return selectedData;
}
我需要一种有效的方法来实际在datagridview中检索行。
答案 0 :(得分:0)
您有两个选择
(A)使用反向for
循环代替foreach
for (int i = dgv.SelectedRows.Count - 1; i >= 0; i--)
{
var selectedRow = dgv.SelectedRows[i];
// ...
}
(B)创建像这样的扩展方法
public static class DataGridViewExtensions
{
public static IEnumerable<DataGridViewRow> GetSelectedRows(this DataGridView source)
{
for (int i = source.SelectedRows.Count - 1; i >= 0; i--)
yield return source.SelectedRows[i];
}
}
并按如下方式使用
foreach (var selectedRow in dgv.GetSelectedRows())
{
// ...
}