簡體   English   中英

如何交換dataTable行值?

[英]How to swap dataTable row values?

MyScenario,我有三行。我想交換第一列的值。如何實現這一點?

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,'Column',0,1)交換前2行的字段值

除非您想要一種適用於任意行的通用算法,否則我不會真正看到問題。 無論如何,您都需要定義要在哪幾行之間交換值; 兩行之間的交換確實很簡單,尤其是在使用Framework版本4的情況下,在該版本中,DataRow有兩種簡潔的擴展方法:Field和SetField。 如果不是,則需要獲取每個DataRow的ItemArrays,交換數組中的值,並將數組分配回其行。

交換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;
        }
    }

你需要寫一些像

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM