2010-09-25 123 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; 
     } 
    }