前言
DataTable中两列值,有交叉相同的,在保证较小值在前面列的情况下,互换值。
一、处理前/处理后DataTable
处理前:
处理后:
二、C#代码
代码如下(示例):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
namespace ConsoleApplication6
{
class Program
{
static void Main(string[] args)
{
DataTable dt1 = new DataTable();
dt1.Columns.Add("数据1");
dt1.Columns.Add("源");
dt1.Columns.Add("数据2");
dt1.Columns.Add("目标");
DataRow dr1 = dt1.NewRow();
dr1["数据1"] = "MD1";
dr1["源"] = "***";
dr1["数据2"] = "MD2";
dr1["目标"] = "###";
dt1.Rows.Add(dr1);
DataRow dr11 = dt1.NewRow();
dr11["数据1"] = "MD1";
dr11["源"] = "***";
dr11["数据2"] = "MD2";
dr11["目标"] = "###";
dt1.Rows.Add(dr11);
DataRow dr2 = dt1.NewRow();
dr2["数据1"] = "MD2";
dr2["源"] = "***";
dr2["数据2"] = "MD1";
dr2["目标"] = "###";
dt1.Rows.Add(dr2);
DataRow dr22 = dt1.NewRow();
dr22["数据1"] = "MD2";
dr22["源"] = "***";
dr22["数据2"] = "MD1";
dr22["目标"] = "###";
dt1.Rows.Add(dr22);
DataRow dr3 = dt1.NewRow();
dr3["数据1"] = "300";
dr3["源"] = "***";
dr3["数据2"] = "300";
dr3["目标"] = "###";
dt1.Rows.Add(dr3);
DataRow dr33 = dt1.NewRow();
dr33["数据1"] = "300";
dr33["源"] = "***";
dr33["数据2"] = "300";
dr33["目标"] = "###";
dt1.Rows.Add(dr33);
DataRow dr4 = dt1.NewRow();
dr4["数据1"] = "400";
dr4["源"] = "***";
dr4["数据2"] = "400";
dr4["目标"] = "###";
dt1.Rows.Add(dr4);
DataRow dr44 = dt1.NewRow();
dr44["数据1"] = "400";
dr44["源"] = "***";
dr44["数据2"] = "400";
dr44["目标"] = "###";
dt1.Rows.Add(dr44);
DataRow dr5 = dt1.NewRow();
dr5["数据1"] = "MD3";
dr5["源"] = "***";
dr5["数据2"] = "MD4";
dr5["目标"] = "###";
dt1.Rows.Add(dr5);
DataRow dr6 = dt1.NewRow();
dr6["数据1"] = "MD4";
dr6["源"] = "***";
dr6["数据2"] = "MD3";
dr6["目标"] = "###";
dt1.Rows.Add(dr6);
DataRow dr7 = dt1.NewRow();
dr7["数据1"] = "MD5";
dr7["源"] = "***";
dr7["数据2"] = "MD3";
dr7["目标"] = "###";
dt1.Rows.Add(dr7);
DataRow dr8 = dt1.NewRow();
dr8["数据1"] = "MD8";
dr8["源"] = "***";
dr8["数据2"] = "MD3";
dr8["目标"] = "###";
dt1.Rows.Add(dr8);
DataRow dr9 = dt1.NewRow();
dr9["数据1"] = "MD3";
dr9["源"] = "***";
dr9["数据2"] = "MD6";
dr9["目标"] = "###";
dt1.Rows.Add(dr9);
List<int> list1 = new List<int>(); //把需要交换的行记录
for (int i = 0; i < dt1.Rows.Count; i++)
{
if (dt1.Rows[i][0] != dt1.Rows[i][2])
{
for (int j = 0; j < dt1.Rows.Count; j++)
{
if (dt1.Rows[j][0] != dt1.Rows[j][2])
{
if (dt1.Rows[i][0].ToString() == dt1.Rows[j][2].ToString() && dt1.Rows[i][2].ToString() != dt1.Rows[j][0].ToString())
{
if (list1.Contains(j) == false)
{
list1.Add(j);
}
}
else if (dt1.Rows[i][0].ToString() != dt1.Rows[j][2].ToString() && dt1.Rows[i][2].ToString() == dt1.Rows[j][0].ToString())
{
if (list1.Contains(i) == false)
{
list1.Add(i);
}
}
else if (dt1.Rows[i][0].ToString() == dt1.Rows[j][2].ToString() && dt1.Rows[i][2].ToString() == dt1.Rows[j][0].ToString())
{
if (string.Compare(dt1.Rows[i][0].ToString(), dt1.Rows[j][0].ToString()) == 1 && list1.Contains(i) == false)
{
list1.Add(i);
}
else if (string.Compare(dt1.Rows[i][0].ToString(), dt1.Rows[j][0].ToString()) == -1 && list1.Contains(j) == false)
{
list1.Add(j);
}
}
}
}
}
}
for (int i = 0; i < dt1.Rows.Count; i++)
{
for (int k = 0; k < list1.Count; k++)
{
if (i == list1[k])
{
string strTmp = dt1.Rows[i][0].ToString();
dt1.Rows[i][0] = dt1.Rows[i][2];
dt1.Rows[i][2] = strTmp;
string strTmp1 = dt1.Rows[i][1].ToString();
dt1.Rows[i][1] = dt1.Rows[i][3];
dt1.Rows[i][3] = strTmp1;
}
}
}
int a = 0;
Console.ReadKey();
}
}
}