2010-09-25 117 views

回答

0

我真的不明白這個問題,除非你想要一些通用算法,可以在任意數量的行上工作;在任何情況下,您都需要在哪些行之間定義您想要交換的值;在兩行之間交換是非常直接的,特別是如果您使用框架的第4版,其中您有兩個適用於DataRow的純粹擴展方法:Field和SetField。如果沒有,您需要獲取每個DataRow的ItemArrays,交換數組中的值並將數組分配回其行。

2
function SwapField(DataTable table, string columnName, int firstRowIndex, int secondRowIndex) 
{ 
    int columnIndex = table.Columns.GetOrdinal(columnName); 
    if (columnIndex == -1) 
    { 
    // Throw exception 
    } 

    var secondRowField = dataTable.Rows[secondRowIndex][columnIndex]; 
    dataTable.Rows[secondRowIndex][columnIndex] = dataTable.Rows[firstRowIndex][columnIndex]; 
    dataTable.Rows[firstRowIndex][columnIndex] = secondRowField; 
} 

然後 SwapField(dataTable的, '列',0,1),以交換前兩排字段值

-2

你需要寫像

`DataRow row = dt.Rows[index]; 
dt.RemoveAt(index); 
dt.InsertAt(index -1);` 
0

示例代碼中的一些事情交換一個DataGridView的兩行

private void lblMoveDown_Click(object sender, EventArgs e) 
    { 
     moveDown(); 
    } 

    private void lblMoveUp_Click(object sender, EventArgs e) 
    { 
     moveUp(); 
    } 

    private void moveUp() 
    { 
     if (dgvTemplateListToManage.RowCount > 0) 
     { 
      if (dgvTemplateListToManage.SelectedRows.Count > 0) 
      {     
       DataTable dt=dgvTemplateListToManage.DataSource as DataTable; 
       int rowIndex = dgvTemplateListToManage.SelectedRows[0].Index; 

       if (rowIndex != 0) 
       { 
        DataRow row = dt.Rows[rowIndex]; 
        DataRow drToDown= dt.Rows[rowIndex-1]; 
        DataTable dtTemp = dt.Copy(); 

        for (int i = 0; i < dt.Columns.Count; i++) 
        { 
         if (i != 0) 
         { 
          dtTemp.Rows[rowIndex][i] = drToDown[i].ToString(); 
         } 
        } 
        for (int i = 0; i < dt.Columns.Count; i++) 
        { 
         if (i != 0) 
         { 
          dtTemp.Rows[rowIndex-1][i] = row[i].ToString(); 
         } 
        } 
        dgvTemplateListToManage.DataSource = dtTemp; 
       } 

      } 
     } 
    } 

    private void moveDown() 
    {   
     DataTable dt = dgvTemplateListToManage.DataSource as DataTable; 
     int rowIndex = dgvTemplateListToManage.SelectedRows[0].Index; 
     int lastRowIndex = dgvTemplateListToManage.Rows.Count - 1; 

     if (lastRowIndex != rowIndex) 
     { 

      DataRow row = dt.Rows[rowIndex]; 
      DataRow drToUp = dt.Rows[rowIndex + 1]; 
      DataTable dtTemp = dt.Copy(); 

      for (int i = 0; i < dt.Columns.Count; i++) 
      { 
       if (i != 0) 
       { 
        dtTemp.Rows[rowIndex][i] = drToUp[i].ToString(); 
       } 
      } 
      for (int i = 0; i < dt.Columns.Count; i++) 
      { 
       if (i != 0) 
       { 
        dtTemp.Rows[rowIndex + 1][i] = row[i].ToString(); 
       } 
      } 
      dgvTemplateListToManage.DataSource = dtTemp; 
     } 
    }