2017-07-31 29 views
1

我有设置列值对所有行的函数:循环通过选定的行C#的DevExpress

enter image description here

的代码,设置这样的:

//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,但这并不让customability真:

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文件,该方法返回选定行的整型处理,所以你的代码应该是这样的:

首先,你必须保存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); 
    } 
} 
+0

这正是我需要做的(通过该行的'rowhandle'到GetDetailView)。但是我不能使用你建议的那一行的行处理:/ –

+0

我建议的代码有什么问题? – Pikoh

+0

行不是整数(也不能解析它)。行也不包含像.getRowHandle或RowHandle或IndexAt这样的方法或参数,... –