بهتره که خاصیت SelectionMode از شئ dataGridView1 را روی FullRowSelect تنظیم کنیم. خاصیت ReadOnly از شئ dataGridView1 را روی True تنظیم میکنیم تا نشه توسط کاربر بصورت مستقیم توی dataGridView1 ویرایش صورت بگیره. به تعداد هر فیلد هم یک textBox به فرم اضافه میکنیم.
بعدش دکمه های btnEdit و btnUpdate رو به فرم اضافه میکنیم. btnEdit برای پر کردن textBoxهای روی فرم (بر اساس رکورد انتخاب شده در dataGridView1) بکار میره و btnUpdate برای ذخیره تغییرات بکار میره.
در رویداد Click از دکمه btnEdit کدهائی رو مینویسیم که میخوایم تمام textBoxهای روی فرم رو با فیلدهای متناظر در رکورد فعلی از شئ dataGridView1 پر کنیم. مثلا textBox1 باید مقدار داخل فیلد Name از رکورد جاری در dataGridView1 را نمایش دهد، برای پر کردن آن بصورت زیر عمل میکنیم:
textBox1.Text = dataGridView1.CurrentRow.Cells["Name"].Value.ToString();
بقیه textBoxها هم مثل بالا پر میکنیم.
برای رویداد Click از دکمه btnUpdate هم باید کدهائی رو بنویسیم که که مقدار داخل textBoxها رو بگیره و dataGridView1 رو Update کنه. مثلا برای textBox1 که فیلد Name از رکورد جاری رو نمایش میده، میشه بصورت زیر عمل کرد:
dataGridView1.CurrentRow.Cells["Name"].Value = textBox1.Text;
دیگه خیلی مختصر شد...!
البته اگر dataGridView رو به کمک یک bindingSource به یک dataSet وصل کرده باشی، میتونی textBoxهات رو هم متصل (Bind) کنی تا در اینصورت textBoxهات عین خانه های یک dataGridView عمل کنند. یعنی مثلا با کلیک روی یک رکورد از dataGridView، تمام textBoxها مقادیر فیلدهای رکورد توی dataGridView رو توی خودشون نمایش میدن و با تغییر متن توی textBoxها، مقادیر فیلد رکورد توی dataGridView هم عوض میشه.
مثلا اگر از BindingSource استفاده کردی، برای متصل کردن یکی از textBoxها میشه مثل زیر عمل کرد که فیلد Name از dataGridView1 رو به textBox1 متصل میکنه.
textBox1.DataBindings.Add(new Binding("Text", table1BindingSource, "Name", true));
که table1BindingSource همون شئ ائی هست (از نوع bindingSource) که باهاش dataGridView1 رو به dataSet متصل کردید.