+2 امتیاز
سلام

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

 

با تشکر
بسته شده

2 پاسخ

+2 امتیاز
 
بهترین پاسخ

سلام

با یه مثال توضیح میدم و امیدوارم منظورم رو بتونم برسونم

یه فرم دارم به اسم 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();
        }
    }
}

 

خیلی ممنون شما لطف دارید.
توسط (2,595 امتیاز) 5 15 90
با سلام
اگر در همین مثالی که توضیح دادید فرم 2 از اول باز بود و باکسهایش خالی بود و بخواهیم  یک سطر از دیتاگرید را انتخاب کنیم و ببینیم باکسهای خالی فرم 2 پر می شوند باید چکار کرد؟

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

با تشکر از توجهتان
توسط (131 امتیاز) 3
+2 امتیاز
بایستی یک متغیر عمومی تعریف کنی و شماره ردیف رو به اون اختصاص بدی و در هنگام لود فرم مربوطه شماره ردیف مورد نظر رو در قیلتر اطلاعات قرار بدی
سوال جدید

2,337 سوال

2,871 پاسخ

3,725 دیدگاه

3,924 کاربر

دسته بندی ها

...