کنترل DataGridView
کنترل DataGridView یک کنترل بسیار قدرتمند و منعطف برای نمایش دادهها به صورت جدولی میباشد. به طور کلی میتوان گفت که از این کنترل برای نمایش و ویرایش دادههای موجود در یک یا چند جدول از دیتابیس استفاده میشود. خاصیتها، و نکات این کنترل آنقدر زیاد هستن که برای شرح همه آنها باید یک کتاب جداگانه نوشته شود. با این وجود در این درس ما درباره مهمترین نکاتی که در مورد این کنترل وجود دارد، توضیح میدهیم.
کار با DataGridView بدون کدنویسی
وقتی برای اولین بار یک کنترل DataGridView را بر روی فرم قرار میدهید، این کنترل به صورت زیر نمایش داده میشود :
گزینه | کاربرد |
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 کلیک کرده تا صفحهای به صورت زیر نمایش داده شود :
همانطور که در شکل بالا مشاهده میکنید این پنجره دارای دو قسمت DataBound column و Unbound column میباشد. DataBound column برای نمایش ستونهای جدول یک منبع داده به کار میرود و چون کنترل ما به هیچ منبع دادهای وصل نیست، این قسمت غیر فعال است. چون که در این درس سر و کار ما با بخش UnBound column است درباره گزینههای موجود در این قسمت توضیح میدهیم :
گزینه | کاربرد |
Name | با استفاده از آن میتوان یک نام برای ستون انتخاب کرد. این نام همان نامی است که در موقع کدنویسی با آن سر و کار داریم. |
Type |
با استفاده از آن میتوان نوع ستون را مشخص کرد. نوع ستون میتواند یکی از انواع زیر باشد :
|
Header Text | برای ایجاد یک عنوان برای ستون به کار میرود. |
Visible | با تیک زدن این گزینه ستون مخفی میشود. |
Readonly | با تیک زدن این گزینه ستون فقط خواندنی و غیر قابل ویرایش میشود. |
Frozen | با تیک زدن این گزینه ستون مربوطه ثابت میماند و با Scroll افقی DataGridView سایر ستونها به زیر آن کشیده میشوند (در ادامه یک مثال زده شده است). |
فرض کنید که میخواهیم با توجه به گزینههای موجود در جدول بالا یک ستون با نام Column1 و عنوان First Name ایجاد کنیم. برای این کار به صورت زیر عمل میکنیم :
با زدن دکمه Add در شکل بالا یک ستون به صورت زیر به کنترلمان اضافه میشود :
به همین روش دو ستون دیگر با عناوین Last Name و Age به کنترل اضافه میکنیم و با کمی تغییر اندازه فرم و با تیک زدن گزینه Dock in Parent Container شکل نهایی برنامه را به صورت زیر در میآوریم :
همانطور که مشاهده میکنید، بعد از ایجاد ستونها یک سطر هم به صورت پیشفرض به کنترل اضافه میشود. گزینه Edit Columns هم چیز خاصی ندارد. با کلیک بر روی این گزینه پنجرهای به صورت زیر نمایش داده میشود :
با استفاده از آن میتوان ستونها را حذف و اضافه کرد، عنوان و چیدمان آنها را تغییر داد و در کل تنظیمات مختلفی بر روی آنها اعمال کرد. حال که ستونها را اضافه کردیم، اجازه دهید که مقادیری را هم به این ستونها اضافه کنیم. با دوبار کلیک بر روی هر مستطیل در این کنترل که به آنها اصطلاحاً سلول (Cell) می گویند میتوانید مقادیری را به ستونها اضافه کنید. اضافه کردن این مقادیر مترادف اضافه شدن سطر به این کنترل است. بعد از اضافه کردن مقادیر مورد نظر شکل نهایی، چیزی شبیه به شکل زیر میشود :
کار با 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 را برداشته و برنامه را اجرا کنید. مشاهده میکنید که سطر آخر کنترل حذف شده و به شما اجازه اضافه کردن مقدار به کنترل در محیط ویژوال داده نمیشود :
با برداشتن تیک گزینه Enable Editing شما نمیتوانید مقادیر موجود در سلولها را با دوبار کلیک بر روی آنها به حالت ویرایش درآورید. این کار را انجام داده و با اجرای برنامه سعی کنید که مقدار یک سلول را تغییر دهید. مشاهده میکنید که این کار امکان پذیر نیست. گزینه Enable Column Reordering را تیک بزنید. با تیک این گزینه شما میتوانید جای ستونها را با هم عوض کنید. این کار با گرفتن یک ستون با ماوس و کشیدن آن بر روی ستون دیگر انجام دهید :
گزینه Enable Deleting هم به در صورت تیک خوردن به کاربر اجازه میدهد که یک یا چند سطر انتخاب شده را با استفاده از دکمه Delete کیبورد حذف کند و اگر تیک برداشته شود این کار امکان پذیر نیست. هر ستون دارای خاصیتی به نام Frozen است که دو مقدار true یا false میگیرد. اگر مقدار این خاصیت را در یک ستون true کنیم، ستونهای دیگر در هنگام Scroll کنترل DataGridView به زیر ستون مذکور کشیده میشوند. برای مشاهده کاربرد این خاصیت مقدار آن را درستون اول true میکنیم :
dataGridView1.Columns["Column1"].Frozen = true;
حال اگر کمی DataGridView را کوچکتر کنیم تا Scroll آن نمایان شود، مشاهده خواهید کرد که با جابه جایی اسکرول ستونهای دیگر به زیر این ستون کشیده میشوند :
کار با بقیه گزینهها را در ادامه توضیح میدهیم. دیتاگریدویو دارای خاصیت و رویدادهای زیادی است که در جداول زیر به آنها اشاره شده است :
خاصیت | توضیح | |
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() + "]"); }
با اجرای برنامه و با کلیک بر روی هر سلول، اندیس سطر و ستون آن نمایش داده میشود :
با توجه به شکل بالا، سلولی با مقدار Jordan در سطر سوم و ستون دوم قرار داد. برای به دست آوردن اندیس سطر و ستون یک سلول از خاصیت CurrentCellAddress هم میتوان استفاده کرد :
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { MessageBox.Show(dataGridView1.CurrentCellAddress.ToString()); }
یکی دیگر از روشهای به دست آوردن اندیس سطر و ستونهای یک سلول استفاده از خاصیت 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() + "]"); }
با اجرای برنامه و با کلیک بر روی هر سلول، اندیس سطر و ستون آن نمایش داده میشود :
خاصیتی دیگر که با استفاده از آن میتوان اندیس سطر و ستونهای یک سلول را به دست آورد خاصیت 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 به معنای ستون جاری است. بر روی یک سلول کلیک کنید مقدار آن برای شما چاپ میشود :
البته به جای [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 یک سلول به حالت انتخاب در میآید. اگر بخواهید یک سطر را به طور کامل انتخاب کنید کافیست که مثلاً در رویداد Load فرم از کد زیر استفاده کنید :
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
خاصیت SelectionMode از دیتاگریدویو یک مقدار از نوع شمارشی DataGridViewSelectionMode میگیرد. این نوع شمارشی دارای مقادیر مختلفی است که یکی از آنها FullRowSelect میباشد که با اختصاص آن به خاصیت SelectionMode باعث میشود که با کلیک بر روی یک سطر، تمام سطر به حالت انتخاب درآید :
برای انتخاب یک ستون از 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 را حذف کنید. برای این منظور ابتدا یک دکمه بر روی فرم قرار دهید و سپس با دوبار کلیک بر روی آن، کدهای زیر را در رویداد 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 دوم اضافه میکنیم. برنامه را اجرا و با کلیک بر روی یک سطر نتیجه را مشاهده کنید :
سلام
من یه فرم دارم که دوتا دیتاگرید داره.اولی اطلاعات کاربران رو نشون میده دومی دسترسی هرکاربر رو یعنی با کلیک رو دیتاگرید اولی و کاربر انتخابی دیتاگریدویو دومی دسترسی های اون کاربر رو نشون میده.
چطور میتونم اینو انجام بدم؟
تو سایت همچین چیزی هست؟
چون میخواستم حق اشتراک پرداخت کنم گفتم قبلش بپرسم.
سلام
من دوتا فرم در برنامه دارم میخوام فرم دوم رو بعنوان کنترل دیتاگرید فرم اول استفاده کنم بدین منظور که وقتی روی دیتا گرید فرم دوم حرکت میکنم فوکوس دیتاگرید فرم اول هم همانطور حرکت کند ، چطور میتونم این کار رو بکنم ؟
سلام، سوالتونو تو بخش پرسش و پاسخ (http://www.w3-farsi.com/forum) مطرح بفرمایید
اونجا پرسیدم اما اون چیزی که میخواستم جواب نگرفتم اگه میشه راهنمایی کنید