[英]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.