Цикл по выбранным строкам 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 ответ

Решение

Вы добавляете все выбранные строки в свой selectedRowsArrayList, Но после этого вы не используете его ни для чего. Я думаю, что вы хотите (я никогда не использовал devexpress контролирует) использует эти выбранные строки RowHandle передать его GetDetailView метод. Согласно GetSelectedRows документация, метод возвращает дескрипторы int выбранных строк, поэтому ваш код должен выглядеть следующим образом:

Во-первых, вы должны сохранить DataRow ручки, а не DataRow сам, поэтому вы должны изменить в своем коде эту строку:

selectedRows.Add(gridView.GetDataRow(gridView.GetSelectedRow‌​s()[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);
     } 
}
Другие вопросы по тегам