سلام
با یه مثال توضیح میدم و امیدوارم منظورم رو بتونم برسونم
یه فرم دارم به اسم Form1 که یه دیتاگرید ویو داره با اسم dataGridView1 و دو ستون یکی برای نام و دیگری برای نام خانوادگی اسم ستون نام firstname و اسم ستون نام خانوادگی lastname هستش.
و یه فرم دیگه به اسم Form2 دارم که دو تا لیبل داره و نام و نام خانوادگی رو در اونها تایپ کردم و دو تا تکست باکس دارم که یکی برای نام و دیگری برای نام خانوادگی هستش، اسم تکست باکس نام txtFirstName و اسم تکست باکس نام خانوادگی txtLastName هستش میخوام وقتی روی یک ردیف دیتاگرید ویو تو Form1 کلیک میکنم اطلاعات همون ردیف به این دوتا تکست باکس انتقال پیدا کنه سپس اطلاعات ویرایش و مجددا به دیتاگرید ویو انتقال پیدا کنه.
در سازنده کلاس Form1 دو ردیف به دیتاگرید ویو اضافه میکنیم تا بتونیم امتحانش کنیم
public Form1()
{
InitializeComponent();
dataGridView1.Rows.Add("ali", "moradi");
dataGridView1.Rows.Add("mohsen", "azizi");
}
برای اینکه اطلاعات ردیف انتخاب شده دیتاگرید ویو رو برای ویرایش به Form2 ارسال کنیم اول باید بدونیم بر روی کدوم ردیف کلیک شده برای این کار میتونیم از رویداد MouseClick استفاده کنیم و یکی از روشها استفاده از همین رویداد هستش و احتمالا روشهای بهتری هم باشه.
private void dataGridView1_MouseClick(object sender, MouseEventArgs e)
{
}
برای ارسال اطلاعات به Form2 باید یک شی از این کلاس ایجاد کنیم
Form2 form2 = new Form2();
و بعد به کنترلهای مورد نظرمون که تکست باکس نام و تکست باکس نام خانوادگی هستش دسترسی پیدا کنیم و خاصیت Text اونها رو برابر با مقادیر ردیف انتخاب شده دیتاگرید ویو قرار بدیم برای اینکار از این کد استفاده میشه
form2.Controls["txtFirstName"].Text = dataGridView1.CurrentRow.Cells["firstname"].Value.ToString();
form2.Controls["txtLastName"].Text = dataGridView1.CurrentRow.Cells["lastname"].Value.ToString();
تا اینجا مقادیر ردیف انتخاب شده دیتاگرید ویو به تکست باکسها انتقال پیدا کرده و باید فرم رو نمایش بدیم
form2.ShowDialog();
بعد از نمایش Form2 و تغییر دادن اطلاعات ردیف مورد نظر از فرم خارج میشویم و خط کد بالا اجراش به اتمام میرسه، بعد از خارج شدن از فرم هنوز شی ایجاد شده نابود نشده و میتونیم از مقادیر تکست باکس ها استفاده کنیم و استفاده ای که از این تکست باکسها میکنیم اینه که مقادیرشون رو به ردیف انتخاب شده دیتاگرید ویو برمیگردونیم.
dataGridView1.CurrentRow.Cells["firstname"].Value = form2.Controls["txtFirstName"].Text;
dataGridView1.CurrentRow.Cells["lastname"].Value = form2.Controls["txtLastName"].Text;
تمام کدها در Form1 نوشته شده به اینصورت:
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
dataGridView1.Rows.Add("ali", "moradi");
dataGridView1.Rows.Add("mohsen", "azizi");
}
private void dataGridView1_MouseClick(object sender, MouseEventArgs e)
{
Form2 form2 = new Form2();
form2.Controls["txtFirstName"].Text = dataGridView1.CurrentRow.Cells["firstname"].Value.ToString();
form2.Controls["txtLastName"].Text = dataGridView1.CurrentRow.Cells["lastname"].Value.ToString();
form2.ShowDialog();
dataGridView1.CurrentRow.Cells["firstname"].Value = form2.Controls["txtFirstName"].Text;
dataGridView1.CurrentRow.Cells["lastname"].Value = form2.Controls["txtLastName"].Text;
form2.Dispose();
}
}
}