PDA

View Full Version : مبتدی: کار با دو تا datagridview



shadihemesi
شنبه 23 خرداد 1394, 12:20 عصر
مشکل با ادد کردن چند سطر اطلاعات در دیتا گرید دوم از دیتا گرید اول:اشتباه:

asman.abi
شنبه 23 خرداد 1394, 13:29 عصر
مشکل با ادد کردن چند سطر اطلاعات در دیتا گرید دوم از دیتا گرید اول:اشتباه:

لطفا کد های مربوطه رو در اینجا بذارید.

ali_md110
شنبه 23 خرداد 1394, 17:50 عصر
اگر تعدای رکورد به دیتاگراید اول اضافه کنیم بدین صورت


dataGridView1.Rows.Add("ali","ebi");
dataGridView1.Rows.Add("reza", "mori");
dataGridView1.Rows.Add("jef", "cat");
dataGridView1.Rows.Add("boy", "rabert");


با یک حلقه میشه اطلاعات اون رو درون یک گراید دیگه کپی کنیم



for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
var cell0 = dataGridView1.Rows[i].Cells[0].Value;
var cell1 = dataGridView1.Rows[i].Cells[1].Value;
dataGridView2.Rows.Add(cell0, cell1);
//if ((string)cell0 == "ali")//گذاشتن شرط
// dataGridView2.Rows.Add(cell0, cell1);
}


بدون حلقه هم میشه

shadihemesi
شنبه 23 خرداد 1394, 19:21 عصر
این کدی که من نوشتم132216

Mahmoud Zaad
شنبه 23 خرداد 1394, 19:38 عصر
سلام
مشکل چیه؟

shadihemesi
شنبه 23 خرداد 1394, 19:46 عصر
سلام من وقتی یک رکورد رو از دیتا گرید اولی اد میکنم دیگه دومی رو نمیتونم اد کنم :اشتباه:

asman.abi
شنبه 23 خرداد 1394, 19:47 عصر
این کدی که من نوشتم132216

الان خطا میده این؟
RowIndex چیه؟ منظورتون e.RowIndex هست.

shadihemesi
شنبه 23 خرداد 1394, 19:50 عصر
خطا نداره وقتی روی رکورد دوم دابل کلیک میکنم هیچ کاری نمیکنه (میخوام هر چند تا رکورد که از دیتا گرید بالا دابل کلیک کردم بیاد تو دیتا گرید دومی)
منظور از RowIndex همون e.RowIndex هست که به صورت متغییر تعریفش کردم بالا

asman.abi
شنبه 23 خرداد 1394, 19:58 عصر
if اولی رو که نوشتی پرانتز هاش رو بردار.
عکس انداختی نمیشه کپی بگیرم.:ناراحت:

shadihemesi
شنبه 23 خرداد 1394, 20:03 عصر
ببخشید پرانتز کجاش رو مگه جور دیگه میتونم بفرستم؟

asman.abi
شنبه 23 خرداد 1394, 20:07 عصر
if اولی رو که نوشتی پرانتز هاش رو بردار.
عکس انداختی نمیشه کپی بگیرم.:ناراحت:

شما کد رو کپی کنید من میگم. نمی خواستم کل کدو بنویسم. ببخشید:لبخند:

shadihemesi
شنبه 23 خرداد 1394, 20:08 عصر
private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
if (dataGridView2.Rows.Count > 0)
{
for (int i = 0; i < dataGridView2.RowCount; i++)
{
if (dataGridView2.Rows[i].Cells[1].Value.ToString() ==
dataGridView1.Rows[RowIndex].Cells[1].Value.ToString())
{
MessageBox.Show("این درس قبلا اخذ شده است");
}
}
}
else
{
dataGridView2.Rows.Add(
dataGridView1.Rows[RowIndex].Cells[1].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[2].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[3].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[4].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[5].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[6].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[7].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[8].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[9].Value.ToString());
dataGridView2.Update();
}
}

Mahmoud Zaad
شنبه 23 خرداد 1394, 20:24 عصر
اول یه اینجور تابعی بنویسید که تکراری بودن رو چک میکنه:
private bool Duplicate(int index)
{
foreach (DataGridViewRow row in dataGridView2.Rows)
{
if (row.Cells[1].Value != null)
{
if (dataGridView1.Rows[index].Cells[1].Value.ToString() == row.Cells[1].Value.ToString())
{
return true;
}
}
}
return false;
}

بعد هم در رویداد مورد نظر کد زیر رو بنویسید:
private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
if (dataGridView1.Rows[e.RowIndex].Cells[1].Value != null)
{
if (Duplicate(e.RowIndex))
{
MessageBox.Show("تکراری");
}
else
{
dataGridView2.Rows.Add(dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString(),
dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString());
}
}
}

البته شما با توجه به ستون های خودتون کد بالا رو تغییر بدید، این کد برای دوتا ستون هست.

asman.abi
شنبه 23 خرداد 1394, 20:26 عصر
به این صورت تغییر دادم . امتحان کن ببین درست جواب میده. :لبخند:
bool b = true;
if (dataGridView2.Rows.Count > 0)

for (int i = 0; i < dataGridView2.RowCount; i++)

if (dataGridView2.Rows[i].Cells[1].Value.ToString() ==

dataGridView1.Rows[RowIndex].Cells[1].Value.ToString())

{

MessageBox.Show("این درس قبلا اخذ شده است");
b=false;

}

if(b)

{
dataGridView2.Rows.Add(
dataGridView1.Rows[RowIndex].Cells[1].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[2].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[3].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[4].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[5].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[6].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[7].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[8].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[9].Value.ToString());

dataGridView2.Update();

}

shadihemesi
شنبه 23 خرداد 1394, 20:31 عصر
اول یه اینجور تابعی بنویسید که تکراری بودن رو چک میکنه:
private bool Duplicate(int index)
{
foreach (DataGridViewRow row in dataGridView2.Rows)
{
if (row.Cells[1].Value != null)
{
if (dataGridView1.Rows[index].Cells[1].Value.ToString() == row.Cells[1].Value.ToString())
{
return true;
}
}
}
return false;
}

بعد هم در رویداد مورد نظر کد زیر رو بنویسید:
private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
if (dataGridView1.Rows[e.RowIndex].Cells[1].Value != null)
{
if (Duplicate(e.RowIndex))
{
MessageBox.Show("تکراری");
}
else
{
dataGridView2.Rows.Add(dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString(),
dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString());
}
}
}

البته شما با توجه به ستون های خودتون کد بالا رو تغییر بدید، این کد برای دوتا ستون هست.
کد شما الان اد رو انجام میده اما تکراری بودن رو چک نمیکنه

Mahmoud Zaad
شنبه 23 خرداد 1394, 20:37 عصر
کد شما الان اد رو انجام میده اما تکراری بودن رو چک نمیکنه
حتماً ستون های دیگه رو چک می کنید، فایل رو نگاه کنید.

shadihemesi
شنبه 23 خرداد 1394, 20:38 عصر
به این صورت تغییر دادم . امتحان کن ببین درست جواب میده. :لبخند:
bool b = true;
if (dataGridView2.Rows.Count > 0)

for (int i = 0; i < dataGridView2.RowCount; i++)

if (dataGridView2.Rows[i].Cells[1].Value.ToString() ==

dataGridView1.Rows[RowIndex].Cells[1].Value.ToString())

{

MessageBox.Show("این درس قبلا اخذ شده است");
b=false;

}

if(b)

{
dataGridView2.Rows.Add(
dataGridView1.Rows[RowIndex].Cells[1].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[2].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[3].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[4].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[5].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[6].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[7].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[8].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[9].Value.ToString());

dataGridView2.Update();

}
این کد هم تکراری رو چک نمیکنه

asman.abi
شنبه 23 خرداد 1394, 20:43 عصر
سلول مربوط به درس چندمی تو گرید؟
یه تصویر از گرید بده.

shadihemesi
شنبه 23 خرداد 1394, 20:48 عصر
این دیتا گرید هام هست132222

ebrahim.rayatparvar
شنبه 23 خرداد 1394, 22:04 عصر
سلام مهندس جان
کدی که مهندس Mahmoud Zaad گذاشتن درسته. مگر اینکه شما تو گرید دوم سطری برای اضافه کردن نداری و با هر بار کلیک کردن برای اعمال عملایت باید سطر جدیدی اضافه کنید بعد اعمالش کنید که قبلش باید کد


Grid2.Rows.Add();

اضافه کنی بعد مقدار تو گرید 2 بریزی.

shadihemesi
شنبه 23 خرداد 1394, 22:29 عصر
سلام مهندس جان
کدی که مهندس Mahmoud Zaad گذاشتن درسته. مگر اینکه شما تو گرید دوم سطری برای اضافه کردن نداری و با هر بار کلیک کردن برای اعمال عملایت باید سطر جدیدی اضافه کنید بعد اعمالش کنید که قبلش باید کد


Grid2.Rows.Add();

اضافه کنی بعد مقدار تو گرید 2 بریزی.

سلام بله درسته اما تو قطعه کد من جواب نمیده نمیتونه چک بکنه

asman.abi
شنبه 23 خرداد 1394, 22:46 عصر
این هم برای قطعه کد شما

bool b = true;

for (int i = 0; i < dataGridView2.RowCount; i++)
if(dataGridView2.Rows[i].Cells[1].Value!=null)
if (dataGridView2.Rows[i].Cells[1].Value.ToString() == dataGridView1.Rows[RowIndex].Cells[1].Value.ToString())

{

MessageBox.Show("این درس قبلا اخذ شده است");
b=false;

}

if(b)

{

dataGridView2.Rows.Add(
dataGridView1.Rows[RowIndex].Cells[0].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[1].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[2].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[3].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[4].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[5].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[6].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[7].Value.ToString(),
dataGridView1.Rows[RowIndex].Cells[8].Value.ToString());

dataGridView2.Update();

}

Mahmoud Zaad
یک شنبه 24 خرداد 1394, 08:47 صبح
سلام بله درسته اما تو قطعه کد من جواب نمیده نمیتونه چک بکنه
شما دیگه قطعه کد خودتون رو رها کنید چون اگه اون میخواست جواب بده که شما اینجا سوال نمی پرسیدی! این چیزی که تو ضمیمه هست رو با توجه به کار خودتون تغییر بدید.

shadihemesi
یک شنبه 24 خرداد 1394, 09:18 صبح
شما دیگه قطعه کد خودتون رو رها کنید چون اگه اون میخواست جواب بده که شما اینجا سوال نمی پرسیدی! این چیزی که تو ضمیمه هست رو با توجه به کار خودتون تغییر بدید.
ممنون بالاخره انجام شد قطعه کد شما فقط مشکل تو ایندکس مقایسه اش بود