PDA

View Full Version : انتقال اطلاعات یک گریدویو به گرید ویو دیگر



mahdad sepah
جمعه 24 آذر 1391, 19:09 عصر
سلام دوستان
من میخوام یک سطر گریدویو را با کلیک به سطر یک گرید ویو دیگر منتقل کنم که با هر بار کلیک تعداد سطر ها نیز افزایش یابد ممنون میشم کمکم منید چون واقعا کارم گیره:ناراحت:
کد زیر اطلاعات را انتقال میده ولی متاسفانه همه اطلاعات گرید را انتقال میده من فقط اطلاعات سطر انتخاب شده را میخوام

for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
dataGridView2.Rows.Add(dataGridView1.Rows[i].Cells[0].Value, dataGridView1.Rows[i].Cells[1].Value);
}

danialafshari
جمعه 24 آذر 1391, 19:17 عصر
سلام دوست عزیز
می تونی یکم بیشتر توضیح بدی؟
احیانا منظور از انتقال ذخیره در بانک نیست؟ یا از grid 2 به منظور ورودی استفاده میشه بعد با یک کلیک ذخیره میشه در بانک؟
موفق باشی

مهرداد صفا
جمعه 24 آذر 1391, 19:19 عصر
سلام
خصوصیت CurrentRow ردیف جاری است. در ضمن در رویداد CellMouseClick هم E.RowIndex اندیس ردیفی است که کلیک روی آن اتفاق افتاده .

mahdad sepah
جمعه 24 آذر 1391, 19:19 عصر
نه فقط وارد گرید بعدی بشه نیازی به ذخیره در بانک نیست فقط روی یک سطر گرید اول کلیک کرد اطلاعات اون سطر عینا وارد گرید دوم شود

mahdad sepah
جمعه 24 آذر 1391, 19:24 عصر
سلام
خصوصیت CurrentRow ردیف جاری است. در ضمن در رویداد CellMouseClick هم E.RowIndex اندیس ردیفی است که کلیک روی آن اتفاق افتاده .
ممکنه بیشتر توضح بدین؟

مهرداد صفا
جمعه 24 آذر 1391, 20:12 عصر
ممکنه بیشتر توضح بدین؟


CurrentRow ردیف جاری DataGridView است و چون با کلیک ردیف انتخاب شده هم تغییر میکند پس در واقع CurrentRow همان ردیفیست که میخواهید به DataGridView2 اضافه کنید. پس مینویسیم:

private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
dataGridView2.Rows.Add(dataGridView1.CurrentRow);
//یا
dataGridView1.Rows.Add(dataGridView2.Rows[e.RowIndex]);
}

وقتی کلیک اتفاق می افتد RowIndex نشاندهنده شماره ستونی است که روی آن کلیک شده که در خط دوم آن را به DataGridView2 اضافه کردیم.

mahdad sepah
جمعه 24 آذر 1391, 20:21 عصر
CurrentRow ردیف جاری DataGridView است و چون با کلیک ردیف انتخاب شده هم تغییر میکند پس در واقع CurrentRow همان ردیفیست که میخواهید به DataGridView2 اضافه کنید. پس مینویسیم:

private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
dataGridView2.Rows.Add(dataGridView1.CurrentRow);
//یا
dataGridView1.Rows.Add(dataGridView2.Rows[e.RowIndex]);
}

وقتی کلیک اتفاق می افتد RowIndex نشاندهنده شماره ستونی است که روی آن کلیک شده که در خط دوم آن را به DataGridView2 اضافه کردیم.
این ارورو میده
Row provided already belongs to a DataGridView control.

مهرداد صفا
جمعه 24 آذر 1391, 20:41 عصر
این ارورو میده
Row provided already belongs to a DataGridView control.


احتمالا ردیفی را که منتقل میکنید در جدول موجود است. قبل از انتقال چک کنید تا دوباره یک ردیف را منتقل نکنید.

mahdad sepah
جمعه 24 آذر 1391, 20:46 عصر
احتمالا ردیفی را که منتقل میکنید در جدول موجود است. قبل از انتقال چک کنید تا دوباره یک ردیف را منتقل نکنید.
نه خالیه اصن گریدم

مهرداد صفا
جمعه 24 آذر 1391, 22:03 عصر
پس به وسیله مقادیر سلولها ردیف جدید را اضافه کنید. به این صورت:

dataGridView2.Rows.Add((from cell in dataGridView1.CurrentRow.Cells.Cast<DataGridViewCell>() select cell.Value).ToArray());

mahdad sepah
جمعه 24 آذر 1391, 22:22 عصر
پس به وسیله مقادیر سلولها ردیف جدید را اضافه کنید. به این صورت:

dataGridView2.Rows.Add((from cell in dataGridView1.CurrentRow.Cells.Cast<DataGridViewCell>() select cell.Value).ToArray());
ممنون درست شد حالا بخوام تکراری وارد نشه یعنی بیاد ستون تعداد را در قیمت ضرب کنه باید چیکار کنم؟؟؟
مرسی

مهرداد صفا
جمعه 24 آذر 1391, 22:47 عصر
ممنون درست شد حالا بخوام تکراری وارد نشه یعنی بیاد ستون تعداد را در قیمت ضرب کنه باید چیکار کنم؟؟؟
مرسی


خواهش میکنم!
دقیقا متوجه نشدم، اگر امکان دارد واوضحتر توضیح دهید.

mahdad sepah
جمعه 24 آذر 1391, 23:28 عصر
من در یک گرید محصول دارم در گرید دیگر فاکتور می باشد
حالا من میخوام وقتی رو گرید محصول کلیک کردیم مثلا محصول شماره 1 وارد گرید شود به همراه قیمت و تعداد که میخوا با کلیک باشه این مثلا اگه پرتقال انتخاب شد با کلیک بعدی دوباره یه سطر پرتقال ثبت نشه فقط تعداد اش اضافه بشه ودر قیمت هم ضرب بشه

mahdad sepah
شنبه 25 آذر 1391, 11:26 صبح
کسی راه حلی نداره؟؟

veniz2008
شنبه 25 آذر 1391, 11:47 صبح
من در یک گرید محصول دارم در گرید دیگر فاکتور می باشد
حالا من میخوام وقتی رو گرید محصول کلیک کردیم مثلا محصول شماره 1 وارد گرید شود به همراه قیمت و تعداد که میخوا با کلیک باشه این مثلا اگه پرتقال انتخاب شد با کلیک بعدی دوباره یه سطر پرتقال ثبت نشه فقط تعداد اش اضافه بشه ودر قیمت هم ضرب بشه
سلام. این کاری که شما مد نظرت هست اشتباهه. فرض کن طرف میخواد 1 صفحه کلید واسه خودش و 4 تا واسه اداره بخره. با این کاری که شما میخوای انجام بدی، همه رو با هم در نظر میگیره. در صورتیکه فاکتور اداره باید تعدادش 4 تا باشه. به نظر میرسه روی تحلیل برنامه باید یه خورده بیشتر وقت بذارید.
موفق باشی دوست من.

mahdad sepah
شنبه 25 آذر 1391, 11:52 صبح
سلام. این کاری که شما مد نظرت هست اشتباهه. فرض کن طرف میخواد 1 صفحه کلید واسه خودش و 4 تا واسه اداره بخره. با این کاری که شما میخوای انجام بدی، همه رو با هم در نظر میگیره. در صورتیکه فاکتور اداره باید تعدادش 4 تا باشه. به نظر میرسه روی تحلیل برنامه باید یه خورده بیشتر وقت بذارید.
موفق باشی دوست من.
فکر کنم منظورمو بد گفتم
ببینید من باید یه جایی محصولاتو نمایش بدم دیگه درسته؟
حالا کاربر محصولاتو در گرید میبینه با توجه به دسته بندیش سپس هر محصولی که بخوادو با کلیک Add میکنه

veniz2008
شنبه 25 آذر 1391, 12:06 عصر
فکر کنم منظورمو بد گفتم
ببینید من باید یه جایی محصولاتو نمایش بدم دیگه درسته؟
حالا کاربر محصولاتو در گرید میبینه با توجه به دسته بندیش سپس هر محصولی که بخوادو با کلیک Add میکنه
یه ستون از نوع button به گریدتون اضافه کنید (با این کار جلوی هر رکورد یک دکمه قرار میگیره که مینونید متنش رو "انتخاب" بذارید). بقیش هم همونیه که دوستمون در بالا گفت. میتونید از رویداد CellMouseClick مربوط به گرید استفاده کنید و داخل این رویداد کدی رو که دوستمون برای انتقال از یک گرید به گرید دوم گفتن رو قرار بدید. کد زیر رو ببینید. فرض رو بر این گرفتم که اولین ستون (ستون 0 ) همون ستونی باشه که دکمه اضافه شده درون اون قرار داره. در این حالت فقط زمانی محصول اضافه میشه که روی دکمه جلوی اون کلیک بشه :



private void dataGridView1_CellMouseClick(object sender, EventArgs e)

{

if (dataGridView1.CurrentRow.Cells[0].Selected == true)

{
//کد مورد نظر برای انتقال از گرید اول به گرید دوم
}
}


موفق باشید.