Цикл по выбранным строкам C# DevExpress
У меня есть функция, которая устанавливает значения столбцов для всех строк:
Код, который устанавливает это:
//Update the engineers for all rows
Btn_ValidateClick_ItemClick(object sender,ItemClickEventArgs e)
{
UpdateTotalTime(gridView);
}
private void UpdateEngineers(DevExpress.XtraGrid.Views.Base.ColumnView View)
{
//Column name that need to be updated (set)
DevExpress.XtraGrid.Columns.GridColumn col = View.Columns.ColumnByFieldName("Engineers");
try
{
int dataRowCount = View.DataRowCount;
for (int i = 0; i < dataRowCount; i++)
{
GridView detail = (GridView)gridView.GetDetailView(i, 0);
string language = gridView.GetRowCellValue(i, "Language").ToString();
for (int y = 0; y < gridView.GetDetailView(i, 0).RowCount; y++)
{
//Add all values found in a detail column to an arraylist
values.Add(detail.GetRowCellValue(y, "EngineerInitials").ToString());
}
if (values.Count >0 )
object t = //string join ...
View.SetRowCellValue(i, col, t);
}
else
{
object t = "No engineers"
View.SetRowCellValue(i, col, t);
}
}
}
}
}
Проблема в том, что сейчас я хочу, чтобы он устанавливал только выбранные строки.
Я пытался использовать .GetSelectedRows()
-функция и добавление строк в ArrayList
, но на самом деле это не допускает применимость:
private void UpdateTotalTime(DevExpress.XtraGrid.Views.Base.ColumnView View)
{
ArrayList selectedRows = new ArrayList();
for (int i = 0; i < gridView.SelectedRowsCount; i++)
{
if (gridView.GetSelectedRows()[i] >= 0)
selectedRows.Add(gridView.GetDataRow(gridView.GetSelectedRows()[i]));
}
try
{
int count = View.GetSelectedRows().Count();
for (int i = 0; i < selectedRows.Count; i++)
{
//This gets the first row of the count, not the first selected row
GridView detail = (GridView)gridView.GetDetailView(i,0);
}
}
Если я выберу 3 нижних строки, первые 3 обновятся. Почему это?
1 ответ
Вы добавляете все выбранные строки в свой selectedRows
ArrayList
, Но после этого вы не используете его ни для чего. Я думаю, что вы хотите (я никогда не использовал devexpress
контролирует) использует эти выбранные строки RowHandle
передать его GetDetailView
метод. Согласно GetSelectedRows
документация, метод возвращает дескрипторы int выбранных строк, поэтому ваш код должен выглядеть следующим образом:
Во-первых, вы должны сохранить DataRow
ручки, а не DataRow
сам, поэтому вы должны изменить в своем коде эту строку:
selectedRows.Add(gridView.GetDataRow(gridView.GetSelectedRows()[i]));
в это:
selectedRows.Add(gridView.GetSelectedRows()[i]);
А затем измените ваш цикл на это:
for (int i = 0; i < selectedRows.Count; i++)
{
int rowHandle = (int)selectedRows[i];
GridView detail = (GridView)gridView.GetDetailView(rowHandle,0);
}
На самом деле, вы можете сделать все за один цикл:
private void UpdateTotalTime(DevExpress.XtraGrid.Views.Base.ColumnView View)
{
for (int i = 0; i < gridView.SelectedRowsCount; i++)
{
int rowHandle = gridView.GetSelectedRows()[i];
GridView detail = (GridView)gridView.GetDetailView(rowHandle,0);
}
}