Не понимаю в чем ошибка DataGridView

Подскажите в чем ошибка, считает 2x2, 3x3 матрицы, но 2x3 выдает ошибки, что выход за индексы

Программа считает все положительные строки и если их нету сортирует матрицу по возрастанию

namespace WinAPP
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
           
        }

       public class Data
        {
            public static int Value1 { get; set; }
            public static int Value2 { get; set; }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            {
                dataGridView1.Rows.Clear();
                int n = Data.Value1;
                int m = Data.Value2;
                dataGridView1.ColumnCount = n;
                dataGridView1.RowCount = m;
                button2.Enabled = true;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            dataGridView2.Rows.Clear();
            int n = Data.Value1;
            int m = Data.Value2;
            int k;
            int p = 0;
            float[,] array = new float[n, m];
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    array[i, j] = Convert.ToSingle(dataGridView1.Rows[i].Cells[j].Value);
                }
            }

            for (int i = 0; i < n; i++)
            {
                k = 1;
                for (int j = 0; j < m; j++)
                { 
                    if (array[j, i] <= 0)
                    {
                        k = 0; break;

                    }
                }
                if (k != 0) p++;

            }
            label1.Text = "P = " + p.ToString();
            dataGridView2.ColumnCount = dataGridView1.ColumnCount;
            dataGridView2.RowCount = dataGridView1.RowCount;
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                    dataGridView2.Rows[i].Cells[j].Value = array[i, j];

            }
            if(p <= 0)
            {
                for (int i = 0; i < n; i++)
                {
                    for (int j = 0; j < m; j++)
                    {
                        dataGridView2.Sort(dataGridView2.Columns[0], ListSortDirection.Descending);
                    }
                }
                MessageBox.Show("P <Выполнена сортировка!");
            }
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            Form2 fr2 = new Form2();
            fr2.Show();
        }

        private void button3_Click(object sender, EventArgs e)
        {

        }

        private void button3_Click_1(object sender, EventArgs e)
        {
            DialogResult dialogResult = MessageBox.Show("Закрыть программу?", "Подтвердите действие", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
            if (dialogResult == DialogResult.Yes)
            {
                Close();
            }
            else if (dialogResult == DialogResult.No)
            {
                dialogResult = DialogResult.None;
            }
        }
    }
}

private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
    Form1.Data.Value1 = Convert.ToInt32(row.Value);
}

введите сюда описание изображения введите сюда описание изображения


Ответы (1 шт):

Автор решения: aepot

Вы перепутали индексы i и j при обращении к массиву.

Запомните просто, что массив - это array[строки, колонки] или array[высота, ширина], а не наоборот.

Например вот так с счетчиками array[i,j], или вот так с координатами array[y,x] или вот так array[n,m], где m - ширина, а n - высота. В индексаторах первое всегда обозначает высоту, а второе - ширину.

И циклы перебора когда вы организовываете, получается что-то типа

for (int row = 0; row < rowsCount; row++)
    for (int column = 0; column < columnsCount; column++)
    {
        array[row, column] = ...;
    }

Строки и колонки для понимания просты и привычно в индексаторах видеть сначала строки, потом колонки, а не наоборот. Попробуйте привыкнуть к этому и перестанете путаться.

→ Ссылка