PDA

View Full Version : مقایسه دو datagridview و نمایش رکوردهای مشابه



hosseines
یک شنبه 10 اسفند 1393, 19:43 عصر
سلام خدمت دوستان
دو دیتاگرید دارم که حاوی فیلدهای ردیف ، شماره حساب ، مبلغ می باشد
و می خواهم این دو دیتاگرید را براساس شماره حساب مقایسه کنم و رکورد هایی (سطرهایی) که در هر دو می باشد را در یک دیتاگرید دیگر(دیتاگرید سوم) نمایش داده شود و یا سطرهای مشابه در هر دو رنگی شود.
پیشاپیش ممنون از راهنمایی تون.

sajadsobh
یک شنبه 10 اسفند 1393, 20:49 عصر
این دو تا دیتا گرید رو دستی مقدار دادید یا از طریق دیتابیس پر کردید؟!

Mofid.m
یک شنبه 10 اسفند 1393, 20:57 عصر
با دو حلقه تو در تو هم این کار قابل انجامه
حلقه اول از 0 تا تعداد سطر های گرید1
حلقه دوم از 0 تا تعداد سطر های گرید2
حالا خونه شماره حساب گرید اول رو بگیر و تو حلق داخلی تو گرید دوم دنبالش بگرد.
یه آرایه هم میتونی بگیری تا شماره سطر هایی رو که شماره حسابشون مثل هم بود رو اونجا بریزه

hosseines
یک شنبه 10 اسفند 1393, 21:31 عصر
دیتاگریدها رو از فایل متنی پر کردم.

sajadsobh
یک شنبه 10 اسفند 1393, 21:45 عصر
دوستمون Mofid.m (http://barnamenevis.org/member.php?309366-Mofid-m) درست میگه. یه چیزی مثل این:
for (int i = 0; i < dataGridView1.RowCount; i++)
{
for (int j = 0; j < dataGridView2.RowCount; j++)
{
if (Convert.ToInt32(dataGridView1.Rows[i].Cells[1].Value) == Convert.ToInt32(dataGridView2.Rows[j].Cells[1].Value))
{
dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.Yellow;
dataGridView2.Rows[j].DefaultCellStyle.BackColor = Color.Yellow;
}
}
}
البته این واسه یکرنگ کردن سطرهای یکسانه:چشمک:

hosseines
چهارشنبه 13 اسفند 1393, 20:06 عصر
از طریق راهنمایی دوست عزیز sajadsobh (http://barnamenevis.org/member.php?214721-sajadsobh) کد بالا را با کمی تغییر بصورت زیر نوشتم



int counter;
for (int i = 0; i < dataGridView1.RowCount; i++)
{
counter = 0;
for (int j = 0; j < dataGridView2.RowCount; j++)
{
if (Convert.ToInt64(dataGridView1.Rows[i].Cells[1].Value) == Convert.ToInt64(dataGridView2.Rows[j].Cells[1].Value))
{
counter++;
ListBox.Items.Add((i + 1) + "->" + dataGridView1.Rows[i].Cells[1].Value + " " + counter);
ListBox.Items.Add("=======================");
dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.Yellow;
dataGridView2.Rows[j].DefaultCellStyle.BackColor = Color.Yellow;
}
}

}


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

Mofid.m
چهارشنبه 13 اسفند 1393, 20:32 عصر
این کد رو امتحان کن
کد شماست با کمی تغییر
تو ویژال استدیو ننوشتم امتحان کن ببین جواب میده


int counter;
bool IsExist = false;
for (int i = 0; i < dataGridView1.RowCount; i++)
{
IsExist = false;
counter = 0;
for (int j = 0; j < dataGridView2.RowCount; j++)
{
if (dataGridView1.Rows[i].Cells[1].Value.ToString() == dataGridView2.Rows[j].Cells[1].Value.ToString())
{
counter++;
IsExist = true;


}
}


if (IsExist)
{
ListBox.Items.Add((i + 1) + "->" + dataGridView1.Rows[i].Cells[1].Value + " " + counter);
ListBox.Items.Add("=======================");
dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.Yellow;
dataGridView2.Rows[j].DefaultCellStyle.BackColor = Color.Yellow;
IsExist = false;
}




}

hosseines
چهارشنبه 13 اسفند 1393, 21:38 عصر
ممنون دوست عزیز
با کمی تغییر درست شد.