2017-07-31 78 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這樣的方法或參數,... –