PDA

View Full Version : مشکل در انتقال مقدار سطرهای انتخاب شده در datagridview یک فرم به datagridview فرم دیگر



night-wolf
یک شنبه 08 فروردین 1395, 06:24 صبح
باسلام دوستان من دو تا فرم دارم که در هردوی اونها دیتاگرید هست حالا من میخوام با دابل کلیک بر روی سطر دیتاگرید فرم1 اطلاعات به دیتاگرید فرم 2 پاس داده بشه
من اینکارو میکنم و حتی اومدم خاصیت modifires جفت دیتاگرید ها رو Public کردم اما مشکل اینجاست اطلاعات پاس داده نمیشه مگر اینکه دوباره فرم 2 رو ShowDialog کنم که
اونم فقط یه سطر رو نشون میشده به ازای هر نمایش ...

ممنون میشم راهنمایی کنید:لبخندساده:

khokhan
یک شنبه 08 فروردین 1395, 09:41 صبح
باسلام دوستان من دو تا فرم دارم که در هردوی اونها دیتاگرید هست حالا من میخوام با دابل کلیک بر روی سطر دیتاگرید فرم1 اطلاعات به دیتاگرید فرم 2 پاس داده بشه
من اینکارو میکنم و حتی اومدم خاصیت modifires جفت دیتاگرید ها رو Public کردم اما مشکل اینجاست اطلاعات پاس داده نمیشه مگر اینکه دوباره فرم 2 رو ShowDialog کنم که
اونم فقط یه سطر رو نشون میشده به ازای هر نمایش ...

ممنون میشم راهنمایی کنید:لبخندساده:
تغییر modifires کنترل کار زیاد جالبی نیست .......... یعنی ممکنه عواقبی به همراه داشته باشه:لبخند:

به جای اینکار یه متغیرعمومی در فرم دوم یا همون فرم دیافت کننده با یه پارامتر ورودی از نوع ردیف دیتا گرید قرار بده
بعد داخلش همون پرامتر رو به گرید فرم اضافه کن :
public void fromother(DataGridViewRow getRow)
{
this.dataGridView1.Rows.Add(getRow);

}

حالا داخل فرم اولی و در رویداد DoubleClick دیتا گرید می تونی ردیف انتخابی رو با محتویاتش بگیری و به اون متغیر فرم دومی پاس بدی
private void dataGridView1_DoubleClick(object sender, EventArgs e)
{
Form2 form = new Form2();
int i = dataGridView1.SelectedCells[0].RowIndex;
DataGridViewRow row = new DataGridViewRow();
row = (DataGridViewRow)dataGridView1.Rows[i].Clone();
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
row.Cells[j].Value = dataGridView1.Rows[i].Cells[j].Value;
}
form.fromother(row);

form.ShowDialog();

}

البته قبلش بایستی خاصیت FullRowSelect دیتا گرید رو در فرم اول فعال کنی تا هر کدوم از سلولها که روش دابل کلیک شد همون ردیف کلا انتخاب بشه

dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;

night-wolf
یک شنبه 08 فروردین 1395, 15:09 عصر
تغییر modifires کنترل کار زیاد جالبی نیست .......... یعنی ممکنه عواقبی به همراه داشته باشه:لبخند:

به جای اینکار یه متغیرعمومی در فرم دوم یا همون فرم دیافت کننده با یه پارامتر ورودی از نوع ردیف دیتا گرید قرار بده
بعد داخلش همون پرامتر رو به گرید فرم اضافه کن :
public void fromother(DataGridViewRow getRow)
{
this.dataGridView1.Rows.Add(getRow);

}

حالا داخل فرم اولی و در رویداد DoubleClick دیتا گرید می تونی ردیف انتخابی رو با محتویاتش بگیری و به اون متغیر فرم دومی پاس بدی
private void dataGridView1_DoubleClick(object sender, EventArgs e)
{
Form2 form = new Form2();
int i = dataGridView1.SelectedCells[0].RowIndex;
DataGridViewRow row = new DataGridViewRow();
row = (DataGridViewRow)dataGridView1.Rows[i].Clone();
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
row.Cells[j].Value = dataGridView1.Rows[i].Cells[j].Value;
}
form.fromother(row);

form.ShowDialog();

}

البته قبلش بایستی خاصیت FullRowSelect دیتا گرید رو در فرم اول فعال کنی تا هر کدوم از سلولها که روش دابل کلیک شد همون ردیف کلا انتخاب بشه

dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;

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

khokhan
یک شنبه 08 فروردین 1395, 17:53 عصر
دوست عزیز ممنون بابت پاسخ اما خب باز تو این پروژه هم همین مشکل قبلی من وجود داره
شما اگه دقت کنید وقتی رو یک سطر کلیک میکنید خب اطلاعات پاس داده میشه اما وقتی میخوام یه سطر دیگه رو باز به ادامه همون دیتاگرید اضافه کنید فرم 2 دوباره باز میشه و سطر از اول شروع میشه!!!!
چطور حلش کنم؟:لبخند:

کاری نداره که......... ، من راه حل رو نشون شما دادم ، کافی بود تا یه خورده خلاقیت به خرج می دادی :لبخند:
اینطوری بگیم که یه فرم یا بازه یا بسته و از این دو حالت خارج نیست
با یه شرط ساده چک می کنی .... که اگه باز بود فوکوس بشه و اگه بسته بود باز بشه (والبته فرض رو از ابتدا بر باز بودن فرم می گیریم ) و بقیه ماجرا :

private void dataGridView1_DoubleClick(object sender, EventArgs e)
{
Form2 accounts = Application.OpenForms["Form2"] as Form2;
DataGridViewRow row = getrow(dataGridView1);
if (accounts != null)
{
accounts.fromother(row);
accounts.WindowState = FormWindowState.Normal;
accounts.BringToFront();
accounts.Activate();
}
else
{
accounts = new Form2();
accounts.fromother(row);
accounts.Show();
}



}
همین تموم شد

night-wolf
سه شنبه 10 فروردین 1395, 06:26 صبح
کاری نداره که......... ، من راه حل رو نشون شما دادم ، کافی بود تا یه خورده خلاقیت به خرج می دادی :لبخند:
اینطوری بگیم که یه فرم یا بازه یا بسته و از این دو حالت خارج نیست
با یه شرط ساده چک می کنی .... که اگه باز بود فوکوس بشه و اگه بسته بود باز بشه (والبته فرض رو از ابتدا بر باز بودن فرم می گیریم ) و بقیه ماجرا :

private void dataGridView1_DoubleClick(object sender, EventArgs e)
{
Form2 accounts = Application.OpenForms["Form2"] as Form2;
DataGridViewRow row = getrow(dataGridView1);
if (accounts != null)
{
accounts.fromother(row);
accounts.WindowState = FormWindowState.Normal;
accounts.BringToFront();
accounts.Activate();
}
else
{
accounts = new Form2();
accounts.fromother(row);
accounts.Show();
}



}
همین تموم شد

نمونه مثالت حرف نداره اما یه ایراد داره اونم اینه وقتی یه سطر اضافه میشه و من اگه بخوام رو همون سطر یه سطر دیگه جایگزین کنم اینکارو نمیکنه و یه سطر دیگه جایگزین میشه
در کل منظورم اینه میخوام رو هر سطری که کلید فشار دادم مقادیر دقیقا به همون سطر اضافه بشه نه اینکه یکی جدید اضافه بشه ...
ممنون اگه راهنمایی کنی:لبخند: