مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

iran

عضویت از 1394/01/31

نمایش مقدار موجود در کمبوباکس دیتاگرید

  • شنبه 10 مهر 1395
  • 10:56
تشکر میکنم

سلام
یک دیتاگرید داریم که بصورت زیر پر میشود
 

  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.

کد را باید چگونه تغییر بدهم
باتشکر

 

پاسخ های این پرسش

تعداد پاسخ ها : 1 پاسخ
کاربر سایت

سجاد باقرزاده

عضویت از 1392/02/24

  • شنبه 10 مهر 1395
  • 11:34

پیام خطای  شما به این علت است که جدولتون شامل چهار ستون است (پس جدول شما شامل ستون با ایندکس 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());
        }

 

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)