Поиск и изменение дубликатов значений в DataTable
Не получается правильно подставить рандомные значения вместо дубликатов. На выходе у меня повторяются мои же новые значения, что я делаю не так? Покажите простую реализацию данной задачи Не получается правильно подставить рандомные значения вместо дубликатов. На выходе у меня повторяются мои же новые значения, что я делаю не так? Покажите простую реализацию данной задачи
foreach (DataRow row_1 in datatable.Rows)
{
int k = 0;
string UNP_1 = "-666";
string UNP_dop_1 = "-666";
string Ninv_1 = "-666";
foreach (DataColumn column_1 in datatable.Columns)
{
if (column_1.ColumnName == "UNP")
UNP_1 = row_1[column_1].ToString();
if (column_1.ColumnName == "UNP_dop")
UNP_dop_1 = row_1[column_1].ToString();
if (column_1.ColumnName == "Ninv")
Ninv_1 = row_1[column_1].ToString();
if (UNP_1 != "-666" && UNP_dop_1 != "-666" && Ninv_1 != "-666")
{
//----
foreach (DataRow row_2 in datatable_2.Rows)
{
string UNP_2 = "-666";
string UNP_dop_2 = "-666";
string Ninv_2 = "-666";
foreach (DataColumn column_2 in datatable_2.Columns)
{
if (column_2.ColumnName == "UNP")
UNP_2 = row_2[column_2].ToString();
if (column_2.ColumnName == "UNP_dop")
UNP_dop_2 = row_2[column_2].ToString();
if (column_2.ColumnName == "Ninv")
Ninv_2 = row_2[column_2].ToString();
if (UNP_2 != "-666" && UNP_dop_2 != "-666" && Ninv_2 != "-666")
{
if (datatable.Rows.IndexOf(row_1) != datatable_2.Rows.IndexOf(row_2) && Convert.ToInt32(UNP_1) == Convert.ToInt32(UNP_2) && UNP_dop_1 == UNP_dop_2 && Convert.ToInt32(Ninv_1) == Convert.ToInt32(Ninv_2))
{
k++;
if (Repair_Ninv_checkBox1.Checked == true)
{
Test_data_richTextBox1.AppendText(" -> -> " + Ninv_1 + " > 1 (" + datatable.Rows.IndexOf(row_1) + " строка)" + "\n");
string Ninv_OLD = row_1[column_1].ToString();
//MessageBox.Show(datatable.Rows.IndexOf(row_1).ToString() + "----" + datatable_2.Rows.IndexOf(row_2).ToString() + "----" + Ninv_1 + "----" + Ninv_2);
Random rand = new Random();
row_1[column_1] = rand.Next(999999);
string Ninv_New = row_1[column_1].ToString();
Load_data_richTextBox1.AppendText("Repair_Ninv_FILE: " + Ninv_OLD + "->-> " + Ninv_New + " (" + datatable.Rows.IndexOf(row_1) + " строка)" + "\n");
foreach (DataRow row_3 in datatable_2.Rows)
{
foreach (DataColumn column_3 in datatable_2.Columns)
{
string UNP_3 = "-666";
string UNP_dop_3 = "-666";
string Ninv_3 = "-666";
if (column_3.ColumnName == "UNP")
UNP_3 = row_3[column_3].ToString();
if (column_3.ColumnName == "UNP_dop")
UNP_dop_3 = row_3[column_3].ToString();
if (column_3.ColumnName == "Ninv")
Ninv_3 = row_3[column_3].ToString(); ;
if (UNP_3 != "-666" && UNP_dop_3 != "-666" && Ninv_3 != "-666")
{
if (datatable.Rows.IndexOf(row_1) == datatable_2.Rows.IndexOf(row_3) && Convert.ToInt32(UNP_1) == Convert.ToInt32(UNP_3) && UNP_dop_1 == UNP_dop_3 && Convert.ToInt32(Ninv_1) == Convert.ToInt32(Ninv_3))
{
row_3[column_3] = Ninv_New;
return;
}
UNP_3 = "-666";
UNP_dop_3 = "-666";
Ninv_3 = "-666";
}
}
}
}
}
UNP_2 = "-666";
UNP_dop_2 = "-666";
Ninv_2 = "-666";
}
}
}
if (Repair_Ninv_checkBox1.Checked == false && k > 0)
Test_data_richTextBox1.AppendText(" -> -> " + Ninv_1 + " > 1 (" + datatable.Rows.IndexOf(row_1) + " строка)" + "\n");
//----
UNP_1 = "-666";
UNP_dop_1 = "-666";
Ninv_1 = "-666";
}
}
}
Вывод
Repair_Ninv_FILE: 000033->-> 491186 (3 строка)
Repair_Ninv_FILE: 000001->-> 491186 (4 строка)
Repair_Ninv_FILE: 000030->-> 849990 (11 строка)
Repair_Ninv_FILE: 000029->-> 686370 (12 строка)
Repair_Ninv_FILE: 000001->-> 686370 (13 строка)
Repair_Ninv_FILE: 0000031->-> 686370 (14 строка)
Repair_Ninv_FILE: 686370->-> 45176 (14 строка)
Repair_Ninv_FILE: 000037->-> 45176 (19 строка)
Repair_Ninv_FILE: 45176->-> 403981 (19 строка)
Repair_Ninv_FILE: 000112->-> 403981 (20 строка)
Repair_Ninv_FILE: 000110->-> 240361 (24 строка)
Repair_Ninv_FILE: 240361->-> 240361 (24 строка)
Repair_Ninv_FILE: 000039->-> 599165 (26 строка)
Repair_Ninv_FILE: 599165->-> 957970 (26 строка)
Repair_Ninv_FILE: 000089->-> 794350 (30 строка)
Repair_Ninv_FILE: 794350->-> 794350 (30 строка)
Repair_Ninv_FILE: 000014->-> 794350 (32 строка)
Repair_Ninv_FILE: 000015->-> 153155 (33 строка)
Repair_Ninv_FILE: 000016->-> 153155 (34 строка)
Repair_Ninv_FILE: 000110->-> 989534 (35 строка)
Repair_Ninv_FILE: 989534->-> 989534 (35 строка)
Repair_Ninv_FILE: 000019->-> 348340 (36 строка)
Repair_Ninv_FILE: 000036->-> 348340 (37 строка)
Repair_Ninv_FILE: 348340->-> 707145 (37 строка)
Repair_Ninv_FILE: 0000037->-> 707145 (38 строка)
Repair_Ninv_FILE: 707145->-> 543525 (38 строка)
Repair_Ninv_FILE: 000090->-> 543525 (39 строка)
Repair_Ninv_FILE: 000039->-> 902329 (40 строка)
Repair_Ninv_FILE: 902329->-> 97515 (40 строка)
Repair_Ninv_FILE: 0000089->-> 97515 (41 строка)
Repair_Ninv_FILE: 97515->-> 456319 (41 строка)
Repair_Ninv_FILE: 0000036->-> 456319 (42 строка)
Repair_Ninv_FILE: 456319->-> 292699 (42 строка)
Repair_Ninv_FILE: 000110->-> 292699 (46 строка)
Repair_Ninv_FILE: 292699->-> 651504 (46 строка)
Repair_Ninv_FILE: 0000112->-> 651504 (47 строка)
Repair_Ninv_FILE: 000038->-> 846689 (61 строка)
Repair_Ninv_FILE: 000048->-> 846689 (65 строка)
Repair_Ninv_FILE: 31->-> 205494 (67 строка)
Repair_Ninv_FILE: 205494->-> 205494 (67 строка)
Repair_Ninv_FILE: 000031->-> 564299 (68 строка)
Repair_Ninv_FILE: 564299->-> 564299 (68 строка)
Repair_Ninv_FILE: 000040->-> 400679 (69 строка)
Repair_Ninv_FILE: 400679->-> 400679 (69 строка)
Repair_Ninv_FILE: 000054->-> 759483 (70 строка)
Repair_Ninv_FILE: 000036->-> 759483 (71 строка)
Repair_Ninv_FILE: 759483->-> 595863 (71 строка)
Repair_Ninv_FILE: 000038->-> 954668 (74 строка)
Repair_Ninv_FILE: 000039->-> 313474 (75 строка)
Repair_Ninv_FILE: 313474->-> 313474 (75 строка)
Repair_Ninv_FILE: 000014->-> 149853 (84 строка)
Repair_Ninv_FILE: 000089->-> 508658 (86 строка)
Repair_Ninv_FILE: 508658->-> 508658 (86 строка)
Repair_Ninv_FILE: 000090->-> 867463 (87 строка)
Repair_Ninv_FILE: 000054->-> 703843 (95 строка)
Repair_Ninv_FILE: 000037->-> 703843 (96 строка)
Repair_Ninv_FILE: 703843->-> 62648 (96 строка)
Repair_Ninv_FILE: 000019->-> 62648 (97 строка)
Repair_Ninv_FILE: 000029->-> 899027 (98 строка)
Repair_Ninv_FILE: 000017->-> 257833 (105 строка)
Repair_Ninv_FILE: 000016->-> 257833 (107 строка)
Repair_Ninv_FILE: 000040->-> 616638 (113 строка)
Repair_Ninv_FILE: 616638->-> 453017 (113 строка)
Repair_Ninv_FILE: 000017->-> 811822 (116 строка)
Repair_Ninv_FILE: 000040->-> 811822 (117 строка)
Repair_Ninv_FILE: 811822->-> 170628 (117 строка)
Repair_Ninv_FILE: 000048->-> 170628 (119 строка)
Repair_Ninv_FILE: 000015->-> 7008 (124 строка)
Repair_Ninv_FILE: 000030->-> 365812 (125 строка)
Repair_Ninv_FILE: 000033->-> 202192 (127 строка)
Ответы (1 шт):
Автор решения: ev l
→ Ссылка
int oldValue = -666;
Random random = new Random();
DataView dataview = datatable.DefaultView;
dataview.Sort = "Ninv ASC";
datatable = dataview.ToTable();
foreach (DataRow row in datatable.Rows)
{
foreach (DataColumn column in datatable.Columns)
{
if (column.ColumnName == "Ninv")
if (Convert.ToInt32(row[column]) == oldValue)
{
row[column] = random.Next(999999);
oldValue = Convert.ToInt32(row[column]);
}
else
oldValue = Convert.ToInt32(row[column]);
}
}