کنترل DataGridView

کنترل DataGridView یک کنترل بسیار قدرتمند و منعطف برای نمایش داده‌ها به صورت جدولی می‌باشد. به طور کلی می‌توان گفت که از این کنترل برای نمایش و ویرایش داده‌های موجود در یک یا چند جدول از دیتابیس استفاده می‌شود. خاصیت‌ها، و نکات این کنترل آنقدر زیاد هستن که برای شرح همه آنها باید یک کتاب جداگانه نوشته شود. با این وجود در این درس ما درباره مهمترین نکاتی که در مورد این کنترل وجود دارد، توضیح می‌دهیم.

کار با DataGridView بدون کدنویسی

وقتی برای اولین بار یک کنترل DataGridView را بر روی فرم قرار می‌دهید، این کنترل به صورت زیر نمایش داده می‌شود :

DataGridView-in-C#-02

گزینه کاربرد
Choose Data Source برای انتخاب یک منبع داده و اتصال آن به DataGridView جهت نمایش داده‌ها به کار می‌رود.
Edit Columns برای ویرایش ستون‌های ایجاد شده به کار می‌رود.
Add Columns برای اضافه کردن ستون به کار می‌رود.
Enable Adding در صورت تیک خوردن، کاربر می‌تواند سطر جدید به DataGridView اضافه کند.
Enable Editing در صورت تیک خوردن، کاربر می‌تواند اطلاعات سطرها را ویرایش کند.
Enable Deleting در صورت تیک خوردن، کاربر می‌تواند سطرهایی را که می‌خواهد از DataGridView حذف کند.
Enable Column Reordering در صورت تیک خوردن، کاربر می‌تواند ستون‌ها را مرتب کند.
Dock in Parent Container در صورت تیک خوردن، کنترل DataGridView تمام فضای فرم را در بر می‌گیرد.

حال بهتر است که با گزینه‌های موجود در جدول بالا در عمل آشنا شوید. از آنجاییکه در این درس نمی‌خواهیم در مورد کار با دیتابیس توضیح دهیم توضیح گزینه Choose Data Source را به آینده موکول می‌کنیم. ابتدا می‌خواهیم به کنترلمان چند ستون اضافه کنیم. بر روی گزینه Add Column کلیک کرده تا صفحه‌ای به صورت زیر نمایش داده شود :
DataGridView-in-C#-03

همانطور که در شکل بالا مشاهده می‌کنید این پنجره دارای دو قسمت DataBound column و Unbound column می‌باشد. DataBound column برای نمایش ستون‌های جدول یک منبع داده به کار می‌رود و چون کنترل ما به هیچ منبع داده‌ای وصل نیست، این قسمت غیر فعال است. چون که در این درس سر و کار ما با بخش UnBound column است درباره گزینه‌های موجود در این قسمت توضیح می‌دهیم :

گزینه کاربرد
Name با استفاده از آن می‌توان یک نام برای ستون انتخاب کرد. این نام همان نامی است که در موقع کدنویسی با آن سر و کار داریم.
Type با استفاده از آن می‌توان نوع ستون را مشخص کرد. نوع ستون می‌تواند یکی از انواع زیر باشد :

  • DataGridViewTextBoxColumn
  • DataGridViewCheckBoxColumn
  • DataGridViewImageColumn
  • DataGridViewButtonColumn
  • DataGridViewComboBoxColumn
  • DataGridViewLinkColumn
Header Text برای ایجاد یک عنوان برای ستون به کار می‌رود.
Visible با تیک زدن این گزینه ستون مخفی می‌شود.
Readonly با تیک زدن این گزینه ستون فقط خواندنی و غیر قابل ویرایش می‌شود.
Frozen با تیک زدن این گزینه ستون مربوطه ثابت می‌ماند و با Scroll افقی DataGridView سایر ستون‌ها به زیر آن کشیده می‌شوند (در ادامه یک مثال زده شده است).

فرض کنید که می‌خواهیم با توجه به گزینه‌های موجود در جدول بالا یک ستون با نام Column1 و عنوان First Name ایجاد کنیم. برای این کار به صورت زیر عمل می‌کنیم :
DataGridView-in-C#-04
با زدن دکمه Add در شکل بالا یک ستون به صورت زیر به کنترلمان اضافه می‌شود :
DataGridView-in-C#-05
به همین روش دو ستون دیگر با عناوین Last Name و Age به کنترل اضافه می‌کنیم و با کمی تغییر اندازه فرم و با تیک زدن گزینه Dock in Parent Container شکل نهایی برنامه را به صورت زیر در می‌آوریم :
DataGridView-in-C#-06
همانطور که مشاهده می‌کنید، بعد از ایجاد ستون‌ها یک سطر هم به صورت پیشفرض به کنترل اضافه می‌شود. گزینه Edit Columns هم چیز خاصی ندارد. با کلیک بر روی این گزینه پنجره‌ای به صورت زیر نمایش داده می‌شود :
DataGridView-in-C#-09
با استفاده از آن می‌توان ستونها را حذف و اضافه کرد، عنوان و چیدمان آنها را تغییر داد و در کل تنظیمات مختلفی بر روی آنها اعمال کرد. حال که ستون‌ها را اضافه کردیم، اجازه دهید که مقادیری را هم به این ستون‌ها اضافه کنیم. با دوبار کلیک بر روی هر مستطیل در این کنترل که به آن‌ها اصطلاحاً سلول (Cell) می گویند می‌توانید مقادیری را به ستون‌ها اضافه کنید. اضافه کردن این مقادیر مترادف اضافه شدن سطر به این کنترل است. بعد از اضافه کردن مقادیر مورد نظر شکل نهایی، چیزی شبیه به شکل زیر می‌شود :
DataGridView-in-C#-08

کار با DataGridView به روش کدنویسی

همانطور که در ابتدای درس مشاهده کردید، تقریباً تمام کارها، از جمله حذف و اضافه کردن ستون‌ها، سطرها، اضافه کردن مقادیر و بسیاری از اعمال دیگر را می‌توان با استفاده از پنجره‌ها و گزینه‌های مختلف کنترل DataGridView انجام داد. حال می‌خواهیم نحوه کار با سطرها و ستون‌ها را با استفاده از کدنویسی به شما آموزش دهیم. ابتدا نحوه اضافه کردن ستون‌ها را به شما آموزش می‌دهیم. یک برنامه جدید ویندوزی ایجاد کرده و یک کنترل DataGridView بر روی فرم قرار دهید. حال بر روی فرم دو بار کلیک کرده تا کنترل کننده رویداد Load ایجاد شود. در داخل این کنترل کننده رویداد کد زیر را بنویسید :

private void Form1_Load(object sender, EventArgs e)
{
    dataGridView1.ColumnCount = 3;

    dataGridView1.Columns[0].Name = "Column1";
    dataGridView1.Columns[1].Name = "Column2";
    dataGridView1.Columns[2].Name = "Column3";

    dataGridView1.Columns[0].HeaderText = "First Name";
    dataGridView1.Columns[1].HeaderText = "Last Name";
    dataGridView1.Columns[2].HeaderText = "Age";
}

در کد بالا ابتدا با اسفاده از خاصیت ColumnCount مشخص کرده‌ایم که قرار است سه ستون به DataGridView اضافه شود. سپس با استفاده از خاصیت‌های Name و HeaderText به هر ستون یک نام و یک عنوان اختصاص داده‌ایم. همانطور که مشاهده می‌کنید اندیس ستون‌های DataGridView از 0 شروع می‌شود. کد بالا را به صورت خلاصه‌تر زیر هم می‌توان نوشت :

private void Form1_Load(object sender, EventArgs e)
{
    dataGridView1.Columns.Add("Column1", "First Name");
    dataGridView1.Columns.Add("Column2", "Last Name");
    dataGridView1.Columns.Add("Column3", "Age");
}

در این کد ما با استفاده از متد ()Add خاصیت Columns سه ستون ایجاد کرده‌ایم. این متد دو آرگومان قبول می‌کند که اولی نام ستون و دیگری عنوان آن است. برنامه را اجرا و نتیجه را مشاهده کنید. برای اضافه کردن سطر هم از خاصیت Rows استفاده می‌شود. این خاصیت دارای یک متد به نام ()Add است که دارای سربارگذاری های مختلفی می‌باشد. در ادامه کدهای قبلی کد زیر را بنویسید :

dataGridView1.Rows.Add(3);

dataGridView1.Rows[0].Cells[0].Value = "Edward";
dataGridView1.Rows[0].Cells[1].Value = "Lyons";
dataGridView1.Rows[0].Cells[2].Value = 17;

dataGridView1.Rows[1].Cells[0].Value = "Monica";
dataGridView1.Rows[1].Cells[1].Value = "Ward";
dataGridView1.Rows[1].Cells[2].Value = 16;

dataGridView1.Rows[2].Cells[0].Value = "Joann";
dataGridView1.Rows[2].Cells[1].Value = "Jordan";
dataGridView1.Rows[2].Cells[2].Value = 20;

در کد با ارسال عدد 3 به این متد ()Add، سه سطر به کنترل اضافه می‌شود. برای اضافه کردن مقادیر به این سطرها هم همانطور که در خطوط بعد مشاهده می‌کنید خاصیت Rows دارای خاصیتی به نام Cells و این خاصیت به نوبه خود دارای خاصیتی به نام Value می‌باشد. از این سه خاصیت برای مقدار دهی به یک سلول خاص از یک سطر خاص استفاده می‌شود. مثلاً برای مقداردهی سلول دوم از سطر سوم به صورت زیر عمل می‌شود :

dataGridView1.Rows[2].Cells[1].Value = "Jordan";

اندیس سطرها و سلولها هم از صفر شروع می‌شود، پس سطر سوم به صورت Rows[2] و سلول دوم به صورت Cells[1] اندیس گذاری می‌شود. خاصیت Value هم یک مقدار از نوع Object قبول می‌کند. در نتیجه بعد از علامت مساوی می‌توان هر نوع داده‌ای را به این خاصیت اختصاص داد. برای اضافه کردن سطرها به صورت ساده‌تر می‌توان از دیگر سربارگذای متد ()Add به صورت زیر استفاده کرد :

dataGridView1.Rows.Add("Edward", "Lyons", 17);
dataGridView1.Rows.Add("Monica", "Ward", 16);
dataGridView1.Rows.Add("Joann", "Jordan", 20);

در کل می‌توان تمام کدهایی را که تا کنون برای ایجاد سطر و ستون در رویداد Load فرم نوشتیم به صورت زیر خلاصه کنیم :

private void Form1_Load(object sender, EventArgs e)
{
    dataGridView1.Columns.Add("Column1", "First Name");
    dataGridView1.Columns.Add("Column2", "Last Name");
    dataGridView1.Columns.Add("Column3", "Age");

    dataGridView1.Rows.Add("Edward", "Lyons", 17);
    dataGridView1.Rows.Add("Monica", "Ward", 16);
    dataGridView1.Rows.Add("Joann", "Jordan", 20);
}

اکنون وقت آن رسیده که در مورد گزینه‌های ابتدای درس توضیح دهیم. تیگ گزینه Enable Adding را برداشته و برنامه را اجرا کنید. مشاهده می‌کنید که سطر آخر کنترل حذف شده و به شما اجازه اضافه کردن مقدار به کنترل در محیط ویژوال داده نمی‌شود :
DataGridView-in-C#-11
با برداشتن تیک گزینه Enable Editing شما نمی‌توانید مقادیر موجود در سلول‌ها را با دوبار کلیک بر روی آنها به حالت ویرایش درآورید. این کار را انجام داده و با اجرای برنامه سعی کنید که مقدار یک سلول را تغییر دهید. مشاهده می‌کنید که این کار امکان پذیر نیست. گزینه Enable Column Reordering را تیک بزنید. با تیک این گزینه شما می‌توانید جای ستون‌ها را با هم عوض کنید. این کار با گرفتن یک ستون با ماوس و کشیدن آن بر روی ستون دیگر انجام دهید :
DataGridView-in-C#-07

DataGridView-in-C#-12
گزینه Enable Deleting هم به در صورت تیک خوردن به کاربر اجازه می‌دهد که یک یا چند سطر انتخاب شده را با استفاده از دکمه Delete کیبورد حذف کند و اگر تیک برداشته شود این کار امکان پذیر نیست. هر ستون دارای خاصیتی به نام Frozen است که دو مقدار true یا false می‌گیرد. اگر مقدار این خاصیت را در یک ستون true کنیم، ستون‌های دیگر در هنگام Scroll کنترل DataGridView به زیر ستون مذکور کشیده می‌شوند. برای مشاهده کاربرد این خاصیت مقدار آن را درستون اول true می‌کنیم :

dataGridView1.Columns["Column1"].Frozen = true;

حال اگر کمی DataGridView را کوچکتر کنیم تا Scroll آن نمایان شود، مشاهده خواهید کرد که با جابه جایی اسکرول ستون‌های دیگر به زیر این ستون کشیده می‌شوند :
DataGridView-in-C#-17
کار با بقیه گزینه‌ها را در ادامه توضیح می‌دهیم. دیتاگریدویو دارای خاصیت و رویدادهای زیادی است که در جداول زیر به آنها اشاره شده است :

خاصیت توضیح
AllowUserToAddRows مشخص می‌کند که آیا کاربر می‌تواند سطر اضافه کند یا نه؟
AllowUserToDeleteRows مشخص می‌کند که آیا کاربر می‌تواند یک سطر را حذف کند یا نه؟
AllowUserToOrderColumns مشخص می‌کند که آیا کاربر می‌تواند با کشیدن ستون به سمت راست یا چپ ترتیب آنها را تغییر دهد یا نه؟
AllowUserToResizeColumns مشخص می‌کند که آیا کاربر می‌تواند ستون را تغییر اندازه دهد یا نه؟
AllowUserToResizeRows مشخص می‌کند که آیا کاربر می‌تواند سطر را تغییر اندازه دهد یا نه؟
AlternatingRowsDefaultCellStyle قالب اعمال شده به سطرهای فرد را تعیین می‌کند.
AutoGenerateColumns مشخص می‌کند که آیا ستون‌ها می‌توانند به صورت خودکار تولید شوند یا نه؟
AutoSizeColumnsMode مشخص می‌کند که عرض ستون‌ها چگونه تغییر کند؟ (بر اساس متن محتوا، یا عنوان و یا…)
AutoSizeRowsMode چگنوگی تغییر ارتفاع سطرها را مشخص می‌کند.
CellBorderStyle قالب خطوط سلول‌های دیتاگرید را مشخص می‌کند.
ClipboardCopyMode مشخص می‌کند که آیا می‌توان مقادیر سلول‌ها را در ClipBoard کپی کرد یا خیر؟
ColumnCount تعداد ستون‌های نمایش داده شده در دیتاگرید را بر می‌گرداند.
ColumnHeadersHeight ارتفاع ستون هدر را مشخص می‌کند.
ColumnHeadersHeightSizeMode مشخص می‌کند که آیا ارتفاع ستون هدر قابل تغییر است یا کاربر باید آن را تغییر دهد یا به صورت خودکار با محتوا تغییر کند.
ColumnHeadersVisible مشخص می‌کند که آیا ستون هدر نمایش داده شود یا خیر؟
Columns مجموعه‌ای از همه ستون‌های کنترل را بر می‌گرداند.
CurrentCell سلول جاری را مقداردهی کرده یا برمی گرداند.
CurrentCellAddress اندیس سطر و ستون سلول فعال را بر می‌گرداند.
CurrentRow سطری که حاوی سلول جاری است را بر می‌گرداند.
DataMember نام لیست یا جدولی از منبع داده که قرار است داده‌های آن در دیتاگرید نمایش داده شوند را مشخص می‌کند.
DataSource منبع داده‌ای که دیتاگرید ویو داده‌های آن را نمایش می‌دهد را مشخص می‌کند.
DefaultCellStyle اگر هیچ قالبی برای سلول تنظیم نشده باشد، قالب پیشفرض را به سلول اعمال می‌کند.
GridColor رنگ خطوط جدا کننده سلول‌ها را مشخص می‌کند.
HorizontalScrollBar مشخص می‌کند که کنترل اسکرول بار افقی داشته باشد یا نه؟
HorizontalScrollingOffset تعداد پیکسل‌هایی را که قرار است به صورت افقی پیمایش شوند را مشخص می‌کند.
IsCurrentCellDirty مشخص می‌کند که آیا سلول تغییر پذیر است یا نه؟
MultiSelect مشخص می‌کند که آیا کاربر می‌تواند چندین سلول، سطر یا ستون را انتخاب کند یا نه؟
RowCount تعداد سطرهای دیتاگرید را مشخص می‌کند.
RowHeadersBorderStyle قالب خطوط بین سلول‌های هدر را مشخص می‌کند.
RowHeadersDefaultCellStyle قالب پیشفرض را به سلول‌های هدر اعمال می‌کند.
RowHeadersVisible مشخص می‌کند که آیا هدر نمایش داده شود یا نه؟
RowHeadersWidth عرض ستون‌هایی که در داخل سطر هدر هستند را مشخص می‌کند.
RowHeadersWidthSizeMode مشخص می‌کند که آیا عرض سطر هدر غیر قابل تغیر باشد یا توسط کاربر تغییر کند یا به طور خودکار با محتوای هدر هم اندازه شود.
Rows مجموعه‌ای که شامل همه سطرهای دیتاگرید است را بر می‌گرداند.
ScrollBars نوع نوار پیمایشی که قرار است برای دیتاگرید نمایش داده شود را مشخص می‌کند.
SelectedCells مجموعه‌ای از سلولهایی را که توسط کاربر انتخاب شده‌اند را بر می‌گرداند.
SelectedColumns مجموعه‌ای از ستون‌هایی را که توسط کاربر انتخاب شده‌اند را بر می‌گرداند.
SelectedRows مجموعه‌ای از سطرهایی را که توسط کاربر انتخاب شده‌اند را بر می‌گرداند.
SelectionMode چگونگی انتخاب سلول‌های دیتاگرید را مشخص می‌کند.
ShowCellErrors مشخص می‌کند که آیا خطاهای سلول نمایش داده شوند یا نه؟
ShowCellToolTips مشخص می‌کند که آیا توضیحاتی درباره سلولی که ماوس بر روی آن قرار دارد نمایش داده شود یا نه؟
SortOrder مشخص می‌کند که آیا آیتم‌های کنترل دیتاگرید مرتب شده‌اند یا نه؟

 

رویداد توضیحات
AllowUserToAddRowsChanged وقتی روی می‌دهد که مقدار خاصیت AllowUserToAddRows تغییر کند.
AllowUserToDeleteRowsChanged وقتی روی می‌دهد که مقدار خاصیت AllowUserToDeleteRowsChanged تغییر کند.
AllowUserToOrderColumnsChanged وقتی روی می‌دهد که مقدار خاصیت AllowUserToOrderColumns تغییر کند.
AllowUserToResizeColumnsChanged وقتی روی می‌دهد که مقدار خاصیت AllowUserToResizeColumns تغییر کند.
AllowUserToResizeRowsChanged وقتی روی می‌دهد که مقدار خاصیت AllowUserToResizeRows تغییر کند.
AlternatingRowsDefaultCellStyleChanged وقتی روی می‌دهد که مقدار خاصیت AlternatingRowsDefaultCellStyle تغییر کند.
AutoGenerateColumnsChanged وقتی روی می‌دهد که مقدار خاصیت AutoGenerateColumnsChanged تغییر کند.
AutoSizeColumnModeChanged وقتی روی می‌دهد که مقدار خاصیت AutoSizeMode تغییر کند.
AutoSizeColumnsModeChanged وقتی روی می‌دهد که مقدار خاصیت AutoSizeColumnsMode تغییر کند.
AutoSizeRowsModeChanged وقتی روی می‌دهد که مقدار خاصیت DataGridViewAutoSizeRowsMode تغییر کند.
BackgroundColorChanged وقتی روی می‌دهد که مقدار خاصیت BackgroundColor تغییر کند.
BindingContextChanged وقتی روی می‌دهد که مقدار خاصیت BindingContext تغییر کند.
BorderStyleChanged وقتی روی می‌دهد که مقدار خاصیت BorderStyle تغییر کند.
CausesValidationChanged وقتی روی می‌دهد که مقدار خاصیت CausesValidation تغییر کند.
CellClick وقتی روی می‌دهد که بر روی قسمتی از سلول کلیک شود.
CellContentClick وقتی روی می‌دهد که بر روی محتوای داخل یک سلول کلیک شود.
CellContentDoubleClick وقتی روی می‌دهد که بر روی محتوای سلولها دو بار کلیک شود.
CellContextMenuStripChanged وقتی روی می‌دهد که خاصیت ContextMenuStrip تغییر کند.
CellDoubleClick وقتی روی می‌دهد که بر روی قسمتی از سلول دوبار کلیک شود.
CellEnter وقتی روی می‌دهد که سلول جاری تغییر کرده و یا فوکوس بگیرد.
CellErrorTextChanged وقتی روی می‌دهد که خاصیت ErrorText یک سلول تغییر کند.
ColumnDividerDoubleClick وقتی روی می‌دهد که کاربر بر روی خط جدا کننده دو ستون دوبار کلیک کند.
ColumnDividerWidthChanged وقتی روی می‌دهد که خاصیت DividerWidth تغییر کند.
ColumnHeaderCellChanged وقتی روی می‌دهد که محتوای یک سلول هدر تغییر کند.
ColumnHeaderMouseClick وقتی روی می‌دهد که کاربر بر روی یک ستون هدر کلیک کند.
ColumnHeaderMouseDoubleClick وقتی روی می‌دهد که بر روی یک ستون هدر دو بار کلیک شود.

همانطور که اشاره شد، این کنترل یک کنترل پیچیده با نکات بسیار زیاد است. در ادامه می‌خواهیم مطالبی را به شما آموزش دهیم که در هنگام کار با DataGridView اکثر کاربران با آنها مواجه می‌شوند. مثلاً اینکه چطور مقدار یک سلول که بر روی آن کلیک شده است را به دست آورند و یا چطور مقادیر یک سطر را در داخل چند TextBox نمایش دهند و … . ابتدا بهتر است با چند رویداد پر کاربرد شروع کنیم.

به دست آوردن تعداد سطرها و ستون‌ها

برای به دست آوردن تعداد سطرها و ستون‌های DataGridView می‌توان از خاصیت‌های RowCount و ColumnCount مربوط به آن استفاده کرد. کد زیر را در رویداد Load فرم بنویسید و برنامه را اجرا کنید :

MessageBox.Show(
                "Row : "    + dataGridView1.RowCount.ToString() + "    " +
                "Column : " + dataGridView1.ColumnCount.ToString()
               );

رویدادهای مهم DataGridView

دو رویداد از رویدادهای مهم DataGridView عبارتند از CellClick و CellContentClick. رویداد CellClick زمانی رخ می‌دهد که بر روی یک سلول کلیک شود. بر روی رویداد CellClick دوبار کلیک کرده و کد زیر را بنویسید :

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    MessageBox.Show("This is CellClick Event");
}

با نوشتن کد بالا روی هر سلولی که کلیک کنید پیغام به شما نمایش داده می‌شود. رویداد CellClick زمانی رخ می‌دهد که بر مقداری که در داخل سلول است کلیک شود نه فضای سفید سلول. بر روی رویداد CellContentClick دوبار کلیک کرده و کد زیر را بنویسید :

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    MessageBox.Show("This is CellContentClick Event");
}

برنامه را اجرا کرده و بر روی یک قسمت خالی از یک سلول کلیک کنید. مشاهده می‌کنید که هیچ پیغامی نمایش داده نمی‌شود. حال بر روی مقدار سلول کلیک کرده و نتیجه را مشاهده نمایید.

به دست آوردن اندیس سلول، سطر و ستون

کنترل کننده رویداد این دو رویداد یک شیء از کلاس DataGridViewCellEventArgs می‌گیرد که اطلاعات مهمی درباره سلول و یا سطری که بر روی آن کلیک شده است در اختیار ما قرار می‌دهد. این کلاس دارای دو خاصیت به نام‌های RowIndex و ColumnIndex می‌باشد که به ترتیب برای به دست آوردن اندیس سطر و ستون سلولی که بر روی آن کلیک شده است به کار می‌روند. برای آشنایی با این خاصیت‌ها بر روی رویداد CellClick دوبار کلیک کرده و کدهای زیر را بنویسید :

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    MessageBox.Show("[" + e.RowIndex.ToString() + " , " + e.ColumnIndex.ToString() + "]");
}

با اجرای برنامه و با کلیک بر روی هر سلول، اندیس سطر و ستون آن نمایش داده می‌شود :
DataGridView-in-C#-16

با توجه به شکل بالا، سلولی با مقدار Jordan در سطر سوم و ستون دوم قرار داد. برای به دست آوردن اندیس سطر و ستون یک سلول از خاصیت CurrentCellAddress هم می‌توان استفاده کرد :

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    MessageBox.Show(dataGridView1.CurrentCellAddress.ToString());
}

DataGridView-in-C#-18
یکی دیگر از روش‌های به دست آوردن اندیس سطر و ستون‌های یک سلول استفاده از خاصیت CurrentCell است. این خاصیت دارای دو خاصیت به نام‌های RowIndex و ColumnIndex می‌باشد که به ترتیب اندیس سطر و ستون را بر می‌گردانند :

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
      int X = dataGridView1.CurrentCell.RowIndex;
      int Y = dataGridView1.CurrentCell.ColumnIndex;

      MessageBox.Show("[" + X.ToString() +" , "+ Y.ToString() + "]");
}

با اجرای برنامه و با کلیک بر روی هر سلول، اندیس سطر و ستون آن نمایش داده می‌شود :
DataGridView-in-C#-19

خاصیتی دیگر که با استفاده از آن می‌توان اندیس سطر و ستون‌های یک سلول را به دست آورد خاصیت Rows است :

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{           
    MessageBox.Show(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].ToString());
}

همانطور که می دانید یک سلول از تلاقی یک سطر و ستون به وجود می‌آید. در نتیجه برای به دست آوردن اندیس سطر و ستون سلولی که بر روی آن کلیک شده است به ترتیب از e.RowIndex و e.ColumnIndex استفاده می‌کنیم. قرار دادن e.RowIndex در داخل کروشه خاصیت Rows به معنای سطر فعلی و حال اگر برنامه را اجرا کرده و قرار دادن e.ColumnIndex در داخل خاصیت Cells به معنای ستون جاری است. بر روی یک سلول کلیک کنید مقدار آن برای شما چاپ می‌شود :
DataGridView-in-C#-20
البته به جای [e.RowIndex]Rows در خط اول کد بالا می‌توان از خاصیت CurrentRow به صورت زیر استفاده کرد:

string CellValue = dataGridView1.CurrentRow.Cells[e.ColumnIndex].ToString();

به دست آوردن مقدار یک سلول

برای به دست آوردن مقدار یک سلول از خاصیت Value استفاده می‌شود. کافیست که بعد از به دست آوردن اندیس سلول مورد نظر این خاصیت را اضافه کنید تا مقدار آن را به شما بدهد. مثلاً نوشتن کدهای زیر در رویدادهای CellClick و CellContentClick باعث می‌شود که با کلیک بر روی سلول، مقدار داخل آن به شما نمایش داده شود :

MessageBox.Show(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());
MessageBox.Show(dataGridView1.CurrentRow.Cells[e.ColumnIndex].Value.ToString());

DataGridView-in-C#-14

انتخاب یک سطر یا ستون

در حالت پیشفرض با کلیک بر روی DataGridView یک سلول به حالت انتخاب در می‌آید. اگر بخواهید یک سطر را به طور کامل انتخاب کنید کافیست که مثلاً در رویداد Load فرم از کد زیر استفاده کنید :

dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;

خاصیت SelectionMode از دیتاگریدویو یک مقدار از نوع شمارشی DataGridViewSelectionMode می‌گیرد. این نوع شمارشی دارای مقادیر مختلفی است که یکی از آنها FullRowSelect می‌باشد که با اختصاص آن به خاصیت SelectionMode باعث می‌شود که با کلیک بر روی یک سطر، تمام سطر به حالت انتخاب درآید :
DataGridView-in-C#-13
برای انتخاب یک ستون از DatagridView هم باید از یک حلقه for استفاده کنیم. کد زیر را مثلاً در رویداد CellClick بنویسید :

for (int i = 0; i < dataGridView1.RowCount; i++)
{
    dataGridView1[dataGridView1.CurrentCell.ColumnIndex, i].Selected = true;
}

حال اگر برنامه را اجرا و بر روی یک سلول کلیک کنید، کل ستون مربوط به آن به حالت انتخاب در می‌آید.

نمایش مقادیر سطرهای DataGridView در TextBox

انتخاب کامل یک سطر معمولاً زمانی به کار می‌آید که شما بخواهید مقادیر موجود در سلول‌ها را در TextBox های جداگانه نمایش دهید. فرض کنید که می‌خواهید با کلیک بر روی DataGridView مثالمان مقادیر موجود در سه ستون آن در سه TextBox نمایش داده شوند. برای این کار ابتدا سه TextBox بر روی فرم قرار داده و سپس در رویداد CellClick کدهای زیر را بنویسید :

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex >= 0)
    {
        textBox1.Text = dataGridView1.CurrentRow.Cells["Column1"].Value.ToString();
        textBox2.Text = dataGridView1.CurrentRow.Cells["Column2"].Value.ToString();
        textBox3.Text = dataGridView1.CurrentRow.Cells["Column3"].Value.ToString();
    }
}

در کد بالا و در قسمت شرط چک می‌کنیم که اگر اندیس سطری که بر روی آن کلیک شده است 0 یا بزرگتر از صفر باشد، مقدار ستون اول از سطر انتخاب شده را در داخل TextBox اول، مقدار ستون دوم را در TextBox دوم و مقدار ستون سوم را در TextBox سوم قرار بده. برنامه را اجرا و بر روی یک سطر کلیک کنید :
DataGridView-in-C#-15

حذف سطر یا سطرهای انتخاب شده

گاه ممکن است بخواهید یک یا چند سطر از DataGridView را حذف کنید. برای این منظور ابتدا یک دکمه بر روی فرم قرار دهید و سپس با دوبار کلیک بر روی آن، کدهای زیر را در رویداد Click بنویسید :

private void button1_Click(object sender, EventArgs e)
{
    foreach (DataGridViewRow selectedRow in this.dataGridView1.SelectedRows)
    {
        dataGridView1.Rows.RemoveAt(selectedRow.Index);
    }
}

در کد بالا ابتدا یک شیء از کلاس DataGridViewRow ایجاد کرده‌ایم. این کار به معنای این است که ما قرار است بر روی سطرها کاری انجام دهیم. قسمت شرط به این معناست که “به ازای سطرهای انتخاب شده از DataGridView” فلان کار را انجام بده. چه کاری؟ در داخل بدنه حلقه اندیس تک تک سطرهای انتخاب شده را به متد ()RemoveAt می‌دهیم تا آنها را حذف کند. برنامه را اجرا کرده و با انتخاب یک یا چند سطر بر روی دکمه کلیک و نتیجه را مشاهده نمایید.

انتقال سطر از یک DataGridView به DataGridView دیگر

فرض کنید، همین DataGridView که در بالا ایجاد کرده‌ایم و دارای سه سطر و سه ستون است را در اختیار داریم و می‌خواهیم با کلیک بر روی هر سطر از آن، سطر انتخاب شده به DataGridView دیگر منتقل شود. ابتدا یک DataGridView دیگر به فرم اضافه کرده و سپس به کد زیر توجه کنید :

   1: private void Form1_Load(object sender, EventArgs e)
   2: {
   3:     // Add Rows and Columns
   4: 
   5:     dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
   6: 
   7:     dataGridView2.ColumnCount = dataGridView1.ColumnCount;
   8: }
   9: 
  10: private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
  11: {
  12:     string name   =      dataGridView1.CurrentRow.Cells[0].Value.ToString();
  13:     string family =      dataGridView1.CurrentRow.Cells[1].Value.ToString();
  14:     int age       = (int)dataGridView1.CurrentRow.Cells[2].Value;
  15: 
  16:     dataGridView2.Rows.Add(new object[] { name, family, age });
  17: }

همانطور که در کد بالا مشاهده می‌کنید ما برای جلوگیری از تکرار، کدهای مربوط به اضافه کردن سطرها و ستون‌های مربوط به DataGridView اول را ننوشته‌ایم. برای انتقال یک سطر از یک دیتاگرید ویو به دیگری باید کل سطر انتخاب شود که ما این کار را در خط 5 انجام داده‌ایم. شرط دوم برای انتقال سطر برابر بودن ستونهای دو DataGridView است که کد مربوط به آن را در خط 7 نوشته‌ایم. برای نهایی شدن انتقال هم بر روی CellClick دیتاگریدویو اصلی دوبار کلیک کرده و کدهای مربوط به خطوط 14-12 را در داخل آن نوشته‌ایم. همانطور که در خطوط 16-12 مشاهده می‌کنید، به ترتیب مقدار سلول اول، دوم و سوم از سطر انتخاب شده را در سه متغیر قرار می‌دهیم و سپس در خط 16 آن‌ها را به DataGridView دوم اضافه می‌کنیم. برنامه را اجرا و با کلیک بر روی یک سطر نتیجه را مشاهده کنید :
DataGridView-in-C#-21