PDA

View Full Version : سوال: مشکل در جلوگیری از ورود داده تکراری درون datagrid



nasimsltn7@gmail.com
جمعه 06 مرداد 1391, 15:18 عصر
سلام.
من توی فرمم یه دیتا گرید دارم که هر دفعه داده ها رو از طریق کد زیر بهش اضافه میکنم.

object[] ob = new object[5];
ob[1] = l1;
ob[2] = q1;
ob[3] = textBox4.Text;
ob[4] = (int.Parse(textBox5.Text) * int.Parse(textBox4.Text));
dataGridView1.Rows.Add(true, ob[1], ob[2], ob[3], ob[4]);

حالا میخوام بهش بگم که اگه این داده ها مثلا [1]ob تکراری بود سطری بهش اضافه نکنه ولی واسه این کار نمدونم چی کار کنم :افسرده:

Mahmoud.Afrad
جمعه 06 مرداد 1391, 17:56 عصر
چون دارید مستقیما از گرید استفاده میکنید باید با یک حلقه مقدار جدید را با تمام سطرها چک کنید و در صورتی که تکراری نبود درج کنید.

nasimsltn7@gmail.com
جمعه 06 مرداد 1391, 20:35 عصر
چون دارید مستقیما از گرید استفاده میکنید باید با یک حلقه مقدار جدید را با تمام سطرها چک کنید و در صورتی که تکراری نبود درج کنید.
ممنون من الان با کد زیر تونستم از سطر های تکراری رو تشخیص بدم. int sum = 0, i;

for (i = 0; i < dataGridView1.Rows.Count - 1; i++)
{

if(dataGridView1.Rows[i].Cells[1].Value.ToString()==dataGridView1.Rows[i+1].Cells[1].Value.ToString())
{


}

}
حالا چه جوری بهش بگم که وقتی تکراری رو دید سطر دیگه ای اضافه نکنه بلکه با قبلی جمع بزنه؟؟؟؟؟؟؟؟ :افسرده:

Restlesa
جمعه 06 مرداد 1391, 21:06 عصر
برای این کار باید اون سطر تکراری رو پیدا کنی و در حافظه ذخیره و با مقدار تکراری جدید جمع کنی

ali_habibi1384
جمعه 06 مرداد 1391, 21:43 عصر
ممنون من الان با کد زیر تونستم از سطر های تکراری رو تشخیص بدم. int sum = 0, i;

for (i = 0; i < dataGridView1.Rows.Count - 1; i++)
{

if(dataGridView1.Rows[i].Cells[1].Value.ToString()==dataGridView1.Rows[i+1].Cells[1].Value.ToString())
{


}

}
حالا چه جوری بهش بگم که وقتی تکراری رو دید سطر دیگه ای اضافه نکنه بلکه با قبلی جمع بزنه؟؟؟؟؟؟؟؟ :افسرده:
خب ديگه همه شو رفتي ديگه توي If اگه return بذاري از تابعت ميپره بيرون اگه break بزاري از for ميره بيرون اگر continue بذاري ميره اول حلقه for و i بعدي محاسبه ميشه.چيو فراره جمع بزني

nasimsltn7@gmail.com
جمعه 06 مرداد 1391, 22:06 عصر
خب ديگه همه شو رفتي ديگه توي If اگه return بذاري از تابعت ميپره بيرون اگه break بزاري از for ميره بيرون اگر continue بذاري ميره اول حلقه for و i بعدي محاسبه ميشه.چيو فراره جمع بزني
من با استفاده از for همه ی خونه های دیتا گرید رو جستجو میزنم و با if سطر تکراری رو پیدا میکنم ،می خوام وقتی سطر تکراری رو دید دیگه اون سطر رو به دیتا گرید اضافه نکنه بلکه ستون های تعداد و قیمتش رو با قبلی جمع بزنه و توی همون سطر بهم نشون بده !!!

ali_habibi1384
جمعه 06 مرداد 1391, 22:19 عصر
من با استفاده از for همه ی خونه های دیتا گرید رو جستجو میزنم و با if سطر تکراری رو پیدا میکنم ،می خوام وقتی سطر تکراری رو دید دیگه اون سطر رو به دیتا گرید اضافه نکنه بلکه ستون های تعداد و قیمتش رو با قبلی جمع بزنه و توی همون سطر بهم نشون بده !!!
اينو توي دستور If بنويس


dgv["Sum", dgv.CurrentRow.Index].Value =(Convert.ToInt32( dgv["Sum", dgv.CurrentRow.Index].Value.ToString())+ Convert.ToInt32( dgv["Sum", dgv.CurrentRow.Index + 1].Value.ToString())).ToString();
i++;

nasimsltn7@gmail.com
جمعه 06 مرداد 1391, 22:30 عصر
اينو توي دستور If بنويس


dgv["Sum", dgv.CurrentRow.Index].Value =(Convert.ToInt32( dgv["Sum", dgv.CurrentRow.Index].Value.ToString())+ Convert.ToInt32( dgv["Sum", dgv.CurrentRow.Index + 1].Value.ToString())).ToString();
i++;

من کد رو نوشتم ولی هیچ تغییری نکرد:افسرده:
{

object[] ob = new object[5];
ob[1] = l1;
ob[2] = q1;
ob[3] = textBox4.Text;
ob[4] = (int.Parse(textBox5.Text) * int.Parse(textBox4.Text));

dataGridView1.Rows.Add(true, ob[1], ob[2], ob[3], ob[4]);

int sum = 0, i;

for (i = 0; i < dataGridView1.Rows.Count - 1; i++)
{

if(dataGridView1.Rows[i].Cells[1].Value.ToString()==dataGridView1.Rows[i+1].Cells[1].Value.ToString())
{

dataGridView1["Sum", dataGridView1.CurrentRow.Index].Value = (Convert.ToInt32(dataGridView1["Sum", dataGridView1.CurrentRow.Index].Value.ToString()) + Convert.ToInt32(dataGridView1["Sum", dataGridView1.CurrentRow.Index + 1].Value.ToString())).ToString();
i++;

}

}
}

Mahmoud.Afrad
جمعه 06 مرداد 1391, 22:53 عصر
نباید سطرو اضافه کنید بعد مقایسه کنید. مقایسه باید قبل از افزودن باشه. آرایه ای که تعریف کردید 5 خانه داره و شما از 4 تاش استفاده کردید. برای هر کدوم از یک متغیر استفاده کنید بهتره تا نیاز به تبدیل نباشه. علی الحساب یه چیزی مثل کد زیر میخواهید
object[] ob = new object[5];
ob[1] = l1;
ob[2] = q1;
ob[3] = textBox4.Text;
ob[4] = (int.Parse(textBox5.Text) * int.Parse(textBox4.Text));
for (int i = 0; i < dataGridView1.RowCount - 1; i++)
{
if (dataGridView1.Rows[i].Cells[1].Value == ob[1])
{
//dataGridView1.Rows[i].Cells[0].Value = ...
//dataGridView1.Rows[i].Cells[1].Value = ...
//dataGridView1.Rows[i].Cells[2].Value = ...
dataGridView1.Rows[i].Cells[3].Value = Convert.ToString(dataGridView1.Rows[i].Cells[3].Value) + ob[3];
dataGridView1.Rows[i].Cells[4].Value = Convert.ToInt32(dataGridView1.Rows[i].Cells[4].Value) + Convert.ToInt32( ob[4]);

return;
}
}

dataGridView1.Rows.Add(true, ob[1], ob[2], ob[3], ob[4]);

ali_habibi1384
جمعه 06 مرداد 1391, 23:15 عصر
من کد رو نوشتم ولی هیچ تغییری نکرد:افسرده:
{

object[] ob = new object[5];
ob[1] = l1;
ob[2] = q1;
ob[3] = textBox4.Text;
ob[4] = (int.Parse(textBox5.Text) * int.Parse(textBox4.Text));

dataGridView1.Rows.Add(true, ob[1], ob[2], ob[3], ob[4]);

int sum = 0, i;

for (i = 0; i < dataGridView1.Rows.Count - 1; i++)
{

if(dataGridView1.Rows[i].Cells[1].Value.ToString()==dataGridView1.Rows[i+1].Cells[1].Value.ToString())
{

dataGridView1["Sum", dataGridView1.CurrentRow.Index].Value = (Convert.ToInt32(dataGridView1["Sum", dataGridView1.CurrentRow.Index].Value.ToString()) + Convert.ToInt32(dataGridView1["Sum", dataGridView1.CurrentRow.Index + 1].Value.ToString())).ToString();
i++;

}

}
}
شما مگه فيلد Sum داري كه نوشتي! منظور من فيلد تعداد بود نه خود Sum . در ثاني بايد لا اقل خطا بده! شما برنامه تو بذار اينجا اتچ كن.

nasimsltn7@gmail.com
شنبه 07 مرداد 1391, 00:41 صبح
نباید سطرو اضافه کنید بعد مقایسه کنید. مقایسه باید قبل از افزودن باشه. آرایه ای که تعریف کردید 5 خانه داره و شما از 4 تاش استفاده کردید. برای هر کدوم از یک متغیر استفاده کنید بهتره تا نیاز به تبدیل نباشه. علی الحساب یه چیزی مثل کد زیر میخواهید
object[] ob = new object[5];
ob[1] = l1;
ob[2] = q1;
ob[3] = textBox4.Text;
ob[4] = (int.Parse(textBox5.Text) * int.Parse(textBox4.Text));
for (int i = 0; i < dataGridView1.RowCount - 1; i++)
{
if (dataGridView1.Rows[i].Cells[1].Value == ob[1])
{
//dataGridView1.Rows[i].Cells[0].Value = ...
//dataGridView1.Rows[i].Cells[1].Value = ...
//dataGridView1.Rows[i].Cells[2].Value = ...
dataGridView1.Rows[i].Cells[3].Value = Convert.ToString(dataGridView1.Rows[i].Cells[3].Value) + ob[3];
dataGridView1.Rows[i].Cells[4].Value = Convert.ToInt32(dataGridView1.Rows[i].Cells[4].Value) + Convert.ToInt32( ob[4]);

return;
}
}

dataGridView1.Rows.Add(true, ob[1], ob[2], ob[3], ob[4]);

ممنون درست شد.

nasimsltn7@gmail.com
شنبه 07 مرداد 1391, 00:44 صبح
شما مگه فيلد Sum داري كه نوشتي! منظور من فيلد تعداد بود نه خود Sum . در ثاني بايد لا اقل خطا بده! شما برنامه تو بذار اينجا اتچ كن.

مرسی با کد آقای mafaman مشکلم بر طرف شد.