+2 امتیاز
سلام

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

مثلا یه جدول دارم که کلا 5 تا ستون داره و مثلا سطر اولش 3 تا از این ستون ها پره و سطر دومش 5 تا پره

حالا میخوام یه کدی باشه که تو هر سطر مقدار آخرین سلول (سطر یک که میشه سلول تو سطر 3 و سطر 2 میشه سلول سطر 5)

رو انتخاب کنه

2 پاسخ

+1 امتیاز
از اس کیو ال استفاده کردین؟

اگه از اس کیو ال باشه بگین تا راه حلشو خدمتتون بگم
+2 امتیاز

سلام.

یک دیتاگرید ویو با چهار ستون ایجاد و مقدار دهی کنید سپس Enable Editing و Enable Adding رو غیر فعال کنید تا سلولها مقدار null نگیرن و استثنای NullReferenceExeption رخ نده، زمانی این استثنا رخ میده که شما سعی میکنید از چیزی که Null است استفاده کنید مثلا در کد زیر مقدار سلول به رشته تبدیل میشه و اگر مقدار سلول null باشه استثنای NullReferenceExeption  رخ میده.

        // خارج از رویدادها تعریف شود
        struct EndValuesOfColumns
        {
            internal string column1;
            internal string column2;
            internal string column3;
            internal string column4;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // در رویداد کلیک نوشته شود
            EndValuesOfColumns columns;
            columns.column1 = "";
            columns.column2 = "";
            columns.column3 = "";
            columns.column4 = "";
            int result = 0;
            DataGridViewRow row = new DataGridViewRow();

            for (int i = dataGridView1.Rows.Count - 1; i >= 0; i--)
            {
                row = this.dataGridView1.Rows[i];
                if (columns.column1 == "" && !string.IsNullOrWhiteSpace(row.Cells["Column1"].Value.ToString()))
                {
                    columns.column1 = row.Cells["Column1"].Value.ToString();
                    result++;
                }

                if (columns.column2 == "" && !string.IsNullOrWhiteSpace(row.Cells["Column2"].Value.ToString()))
                {
                    columns.column2 = row.Cells["Column2"].Value.ToString();
                    result++;
                }

                if (columns.column3 == "" && !string.IsNullOrWhiteSpace(row.Cells["Column3"].Value.ToString()))
                {
                    columns.column3 = row.Cells["Column3"].Value.ToString();
                    result++;
                }

                if (columns.column4 == "" && !string.IsNullOrWhiteSpace(row.Cells["Column4"].Value.ToString()))
                {
                    columns.column4 = row.Cells["Column4"].Value.ToString();
                    result++;
                }

                if (result == 4)
                {
                    break;
                }
            }
            MessageBox.Show(string.Join(",", columns.column1, columns.column2, columns.column3, columns.column4));
        }

اگر به توضیح بیشتری نیاز داشتید در خدمتم.

اگر دیتاگرید ویو باید قابلیت افزایش سطر جدید را داشته باشد.

به جای 

int i = dataGridView1.Rows.Count - 1

در حلقه for از

int i = dataGridView1.Rows.Count - 2

استفاده کنید(به جای منهای 1 از منهای 2 استفاده کنید).

البته میشه مشکل Enable Editing رو هم حل کرد اما باید کدهای بیشتری بنویسید اما در صورت که نیاز به ویرایش ندارد از همین کدها میتونید استفاده کنید.

نکته: اگر مقادیر سلولهای دیتاگرید ویو تعداد کاراکترهای زیادی داره از struct استفاده نکنید، چون struct از stack حافظه محدود و پر سرعت استفاده میکنه، بنابراین محدودیت stack رو در نظر بگیرید.

ویرایش شده توسط
توسط (2,595 امتیاز) 5 15 90
سوال جدید

2,337 سوال

2,871 پاسخ

3,725 دیدگاه

3,924 کاربر

دسته بندی ها

...