سلام
یک دیتاگرید داریم که بصورت زیر پر میشود
private void Form8_Load(object sender, EventArgs e) { dataGridView2.ColumnCount = 3; dataGridView2.Columns[0].Name = "Product ID"; dataGridView2.Columns[1].Name = "Product Name"; dataGridView2.Columns[2].Name = "Product Price"; string[] row = new string[] { "1", "Product 1", "1000" }; dataGridView2.Rows.Add(row); row = new string[] { "2", "Product 2", "2000" }; dataGridView2.Rows.Add(row); row = new string[] { "3", "Product 3", "3000" }; dataGridView2.Rows.Add(row); row = new string[] { "4", "Product 4", "4000" }; dataGridView2.Rows.Add(row); DataGridViewComboBoxColumn cmb = new DataGridViewComboBoxColumn(); cmb.HeaderText = "Select Data"; cmb.Name = "cmb"; cmb.MaxDropDownItems = 4; cmb.Items.Add("True"); cmb.Items.Add("False"); dataGridView2.Columns.Add(cmb); }
حال می خواهم هرگاه از یک ردیف خارج شدم
var a = dataGridView2.CurrentRow.Cells[4].Value.ToString(); if (dataGridView2.CurrentRow != null) MessageBox.Show(a);
مقدار داخل کموباکس را نمایش بدهد
اما ارور زیر را می دهد
An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll Additional information: Index was out of range. Must be non-negative and less than the size of the collection.
کد را باید چگونه تغییر بدهم
باتشکر
پیام خطای شما به این علت است که جدولتون شامل چهار ستون است (پس جدول شما شامل ستون با ایندکس 0 تا می باشد3 ) و اشاره شما به ستونی با ایندکس 4 است که وجود ندارد و برای همین outofrange میدهد. شما می توانید مقدار ها ایندکس 0، 1 و 2 را دریافت کنید و نمایش دهید ولی برای جلوگیری از خطای null بودن لازم است مقدار داشتن سلول i ام از ردیف جاری را چک کنید . کد زیر را بررسی کنید :
private void Form1_Load(object sender, EventArgs e) { dataGridView2.ColumnCount = 3; dataGridView2.Columns[0].Name = "Product ID"; dataGridView2.Columns[1].Name = "Product Name"; dataGridView2.Columns[2].Name = "Product Price"; string[] row = new string[] { "1", "Product 1", "1000" }; dataGridView2.Rows.Add(row); row = new string[] { "2", "Product 2", "2000" }; dataGridView2.Rows.Add(row); row = new string[] { "3", "Product 3", "3000" }; dataGridView2.Rows.Add(row); row = new string[] { "4", "Product 4", "4000" }; dataGridView2.Rows.Add(row); DataGridViewComboBoxColumn cmb = new DataGridViewComboBoxColumn(); cmb.HeaderText = "Select Data"; cmb.Name = "cmb"; cmb.MaxDropDownItems = 4; cmb.Items.Add("True"); cmb.Items.Add("False"); dataGridView2.Columns.Add(cmb); } private void dataGridView2_RowLeave(object sender, DataGridViewCellEventArgs e) { var a = dataGridView2.Rows[e.RowIndex].Cells[1].Value; if (a != null) MessageBox.Show(a.ToString()); }
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)