PDA

View Full Version : پیدا کردن رکورد های تکراری در DataGridView



nasr
پنج شنبه 28 خرداد 1388, 13:11 عصر
سلام

چطور میشه رکوردهای تکراری در یک دیتاگریدویو را پیدا و حذف کرد

Open-Source
پنج شنبه 28 خرداد 1388, 13:49 عصر
از اول تا آخر gride رو یکی یکی بخون
هر رکورد رو با رکورد بعدی خودش مقایسه کن
اگه برابر بودند حذف کن.

لازم به ذکر است که قبل از این کار gride را sort کن.

nasr
یک شنبه 31 خرداد 1388, 13:11 عصر
سلام

من با اینکار رکورد های تکراری را از گرید حذف کردم

حالا یک DataGridView دیگه دارم که احتمال داره یک سری رکورد در اون وجود داشته باشه که در این DataGridView من هم وجود داره

چطور می تونم رکورد های تکراری موجود در این دوتا DataGridView را حذف کنم؟

ممنون

Reza_Yarahmadi
یک شنبه 31 خرداد 1388, 21:27 عصر
میتونید از الگوریتم Merge Sort استفاده کنید اول دو تا گرید رو مرتب کنید بعد با همدیگه مقایسه کنید (به روش Merge Sort)

nasr
سه شنبه 02 تیر 1388, 09:58 صبح
میتونید از الگوریتم Merge Sort استفاده کنید اول دو تا گرید رو مرتب کنید بعد با همدیگه مقایسه کنید (به روش Merge Sort)
میشه توضیح بدید؟
ممنون

Reza_Yarahmadi
سه شنبه 02 تیر 1388, 15:55 عصر
هر دو گرید رو بر اساس یک فیلد مشترک مرتب کنید
از اندیس صفر (سطر اول) گرید شروع کنید و سطر به سطر با هم مقایسه کنید. اگر فیلدی که بر اساس اون گریدها مرتب شده مقدارشون با هم مساوی بود یکی رو حذف کنید (اگر نیازه، کل سطر رو هم مقایسه کنید) و شمارنده هر دو گرید رو یک واحد اضافه کنید
ولی اگر داده های فیلد مشترک مساوی نیست، فقط شمارنده گریدی که مقدار فیلد مشترکش کمتره رو یکی اضافه کنید
این کار رو تا زمانی انجام بدید که سطرهای یکی از گریدها تموم بشه.

امیدوارم توضیحات واضح باشه!! :گیج:

nasr
چهارشنبه 03 تیر 1388, 10:28 صبح
سلام
مشکل من اینه که نمیتونم گرید را سورت کنم
چون من بر اساس مقایسه 5 تا فیلد با هم میتونم مشخص کنم که این رکورد تکراری است
در نتیجه گرید باید بر اساس 5 تا فیلد مرتب بشه

از طرفی گرید مربوطه هیچ DataSource ی نداره

این لینک را ببینید.
http://barnamenevis.org/forum/showthread.php?t=165150
ممنون

Open-Source
چهارشنبه 03 تیر 1388, 11:33 صبح
سلام

من با اینکار رکورد های تکراری را از گرید حذف کردم

حالا یک DataGridView دیگه دارم که احتمال داره یک سری رکورد در اون وجود داشته باشه که در این DataGridView من هم وجود داره

چطور می تونم رکورد های تکراری موجود در این دوتا DataGridView را حذف کنم؟

ممنون

من درست منظورت رو متوجه نشدم.:متفکر:


حالا به نظر من:
یک رکورد از دیتا گرید اول رو با همه رکوردهای دیتا گرید دوم مقایسه کن.
اگه توی دیتا گرید دوم رکورد تکراری داشتی حذفش کن.

nasr
چهارشنبه 03 تیر 1388, 13:00 عصر
الان دقیقا همین کار را می کنم و رکوردها را با این روش پیدا و حذف می کنم

ولی روی تعداد رکوردهای 70 هزار تا در گرید اول و 2 هزار تا توی گرید دوم زمان خیلی زیادی میبره

Reza_Yarahmadi
چهارشنبه 03 تیر 1388, 16:22 عصر
دوست عزیز وقتی یک فیلد بین دو رکورد مساوی نباشه کل رکورد مساوی نیست دیگه!!
یه نمونه کد میذارم امیدوارم به دردتون بخوره


dataGridView1.Sort(dataGridView1.Columns[3], ListSortDirection.Ascending);
dataGridView1.Sort(dataGridView1.Columns[2], ListSortDirection.Ascending);
dataGridView1.Sort(dataGridView1.Columns[1], ListSortDirection.Ascending);
dataGridView1.Sort(dataGridView1.Columns[0], ListSortDirection.Ascending);
int Counter1 = 0, Counter2 = 0;
while ((Counter1 < dataGridView1.RowCount) && (Counter2 < dataGridView2.RowCount))
{
if (dataGridView1.Rows[Counter1].Cells[0] < dataGridView2.Rows[Counter2].Cells[0])
Counter1++;
else if (dataGridView1.Rows[Counter1].Cells[0] > dataGridView2.Rows[Counter2].Cells[0])
Counter2++;
else
{
bool RepeatRowFind = true;
for (int i = 1; i < dataGridView1.ColumnCount; i++)
if (dataGridView1.Rows[Counter1].Cells[i] != dataGridView2.Rows[Counter2].Cells[i])
{
RepeatRowFind = false;
break;
}
if (RepeatRowFind)
{
MessageBox.Show("Find" + Counter1);
//This Row is Deleting
}
}
}

توضیح:
کد بالا یه جور نیمه شبه کد است. مثلا دستور مقایسه دو سلول گرید به این نحو رو نداریم (< >) ولی اصول رعایت شده!