Datagridview добавить новую строку

Добрый день. Хочу добавить новую строку в датагрид , нажимая на кнопку. Прописал, но выходит ошибка.
2

///////////////////Добавление новой строки
        private void button3_Click(object sender, EventArgs e)
        {
            dataGridView1.Rows.Add();
        }

Весь код

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {

        public struct User

        {

            
            public double plohad;
            public int cena;
            public string adress;
            public long tel;


            public User(double _plohad, int _cena, string _adress, long _tel)

            {

                
                plohad = _plohad;
                cena = _cena;
                adress = _adress;
                tel = _tel;

            }

        }
        List<User> users = new List<User>();


        public Form1()
        {
            InitializeComponent();
           
        }

        private void Form1_Load(object sender, EventArgs e)
        {

           


            dataGridView1.AllowUserToAddRows = false;


            users.Add(new User(13.8,6700, "Брянская область, Брянск, р-н Советский, Пятницкий тупик, 5", 78467855667));
            users.Add(new User( 12.3, 5800, "Брянская область, Брянск, р - н Володарский, улица Профсоюзов, 43А", 78462256746));
            users.Add(new User(11, 4900, "Брянская область, Брянск, р-н Советский, улица Горького, 2А", 78467854357));
            users.Add(new User( 10.02, 3796, "Брянская область, Брянск, р-н Советский, улица Грибоедова, 19", 78468556765));
            users.Add(new User(15.7, 7000, "Брянская область, Брянск, р-н Советский, проспект Ленина, 28/1", 78467855667));
            users.Add(new User(14.7, 6900, "Брянская область, Брянск, р-н Советский, Трудовая улица, 5", 78467856476));
            users.Add(new User(12.1, 5900, "Брянская область, Брянск, р-н Советский, улица Калинина, 98А", 78467847357));
            users.Add(new User(20.5, 13000, "Брянская область, Брянск, р-н Советский, Красноармейская улица, 39", 78467875765));
            users.Add(new User(22, 14700, "Брянская область, Брянск, р-н Советский, Канатный переулок, 5", 78467855457));
            users.Add(new User(25, 17200, "Брянская область, Брянск, р-н Советский, проспект Ленина, 78Б", 78467856786));
            users.Add(new User(70.8, 49000, "Брянская область, Брянск, р-н Советский, Красноармейская улица, 39", 78486856357));
            users.Add(new User(95.5, 60000, "Брянская область, Брянск, р-н Советский, Канатный переулок, 5", 78467824765));
            users.Add(new User(40.5, 20000, "Брянская область, Брянск, р-н Советский, проспект Ленина, 8", 78467857567));
            users.Add(new User(37.7, 25900, "Брянская область, Брянск, р-н Советский, Канатный переулок, 5", 78787856746));
            users.Add(new User(27.2, 18550, "Брянская область, Брянск, р-н Советский, Красноармейская улица, 128", 78467854257));
            users.Add(new User(32.9, 28900, "Брянская область, Брянск, р-н Советский, Красноармейская улица, 91", 78467856765));
            users.Add(new User(33.1, 18000, "Брянская область, Брянск, р-н Советский, Красноармейская улица, 91", 78467855667));
            users.Add(new User(14.7, 8600, "Брянская область, Брянск, р-н Советский, Красноармейская улица, 136Б", 78467856746));
            users.Add(new User(50.5, 20000, "Брянская область, Брянск, р-н Советский, Красноармейская улица, 136А", 78467856357));
            users.Add(new User(11.2, 6700, "Брянская область, Брянск, р-н Советский, переулок Осоавиахима, 3А", 78467856765));
            users.Add(new User(13.8, 7890, "Брянская область, Брянск, р-н Володарский, Одесская улица, 7", 78467855667));
            users.Add(new User(12.3, 6200, "Брянская область, Брянск, р-н Советский, проспект Ленина, 10А", 78467856746));
            users.Add(new User(11, 5500, "Брянская область, Брянск, р-н Фокинский, улица Чкалова, 3", 78467856399));
            users.Add(new User(10.02, 5000, "Брянская область, Брянск, р-н Советский, Красноармейская улица, 130", 78465556765));
            users.Add(new User(15.7, 8200, "Брянская область, Брянск, р-н Советский, Карачижская улица, 69", 78467855579));
            users.Add(new User(14.7, 7880, "Брянская область, Брянск, р-н Фокинский, Московский проспект, 29", 78987858746));
            users.Add(new User(12.3, 9775, "Брянская область, Брянск, р-н Советский, проспект Станке Димитрова, 62А", 76867856357));
            users.Add(new User(20.5, 14700, "Брянская область, Брянск, р-н Советский, улица Грибоедова, 19", 78467856465));
            users.Add(new User(22, 12200, "Брянская область, Брянск, р-н Советский, Трудовая улица, 5", 784689755624));
            users.Add(new User(25, 13700, "Брянская область, Брянск, р-н Советский, улица Дуки, 71", 78467854749));
            users.Add(new User(70.8, 35000, "Брянская область, Брянск, р-н Советский, Трудовая улица, 5", 78467847357));
            users.Add(new User(95.5, 50600, "Брянская область, Брянск, р-н Советский, Красноармейская улица, 41", 78446856788));
            users.Add(new User(40.2, 25788, "Брянская область, Брянск, р-н Володарский, улица Пушкина, 33", 78467855677));
            users.Add(new User(37.7, 19540, "Брянская область, Брянск, р-н Советский, Красноармейская улица, 91", 78467856746));
            users.Add(new User(27.2, 14700, "Брянская область, Брянск, р-н Советский, Красноармейская улица, 136Б", 78467856357));
            users.Add(new User(32.9, 21490, "Брянская область, Брянск, р-н Советский, улица Костычева, 3", 7846782765));
            users.Add(new User(33.1, 22400, "Брянская область, Брянск, р-н Володарский, улица Тельмана, 68Б", 78467867667));
            users.Add(new User(14.7, 8200, "Брянская область, Брянск, р-н Володарский, улица Тельмана, 68Б", 78464656746));
            users.Add(new User(50.5, 30000, "Брянская область, Брянск, р-н Советский, Красноармейская улица, 103", 78422885657));
            users.Add(new User(11.2, 7400, "Брянская область, Брянск, р-н Советский, Авиационная улица, 28", 78467856575));

            users.Add(new User(4, 3563, "Брянская область, Брянск, р-н Советский, Красноармейская улица, 91", 78467856746));
            users.Add(new User(2, 2666, "Брянская область, Брянск, р-н Советский, проезд 1-й Станке Димитрова, 14А", 78467856357));
            users.Add(new User(3.2, 3678, "Брянская область, Брянск, р-н Советский, Красноармейская улица, 136", 7846782765));
            users.Add(new User(4.7, 4578, "Брянская область, Брянск, р-н Советский, Советская улица, 105А", 78467867667));
            users.Add(new User(5.2, 5864, "Брянская область, Брянск, р-н Советский, Красноармейская улица, 91", 78464656746));
            users.Add(new User(4.9, 4755, "Брянская область, Брянск, р-н Советский, Авиационный переулок, 4/2", 78422885657));
            users.Add(new User(2.2, 3267, "Брянская область, Брянск, р-н Советский, улица Дуки, 51", 78467856575));
            users.Add(new User(1.2, 1677, "Брянская область, Брянск, р-н Володарский, улица Есенина, 12", 78464656746));
            users.Add(new User(1.7, 1988, "Брянская область, Брянск, р-н Советский, улица Некрасова, 2", 78422885657));
            users.Add(new User(1.8, 1999, "Брянская область, Брянск, р-н Советский, улица Дуки, 37", 78467856575));


            DataTable table = new DataTable();


         


            table.Columns.Add("Площадь", typeof(double));

            table.Columns.Add("Цена", typeof(int));

            table.Columns.Add("Адрес", typeof(string));

            table.Columns.Add("Телефон", typeof(long));


            for (int i = 0; i < users.Count; i++)

            {

                table.Rows.Add( users[i].plohad, users[i].cena, users[i].adress, users[i].tel);

            }



            dataGridView1.DataSource = table;




        }

        private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
        {
         
        }
 /////////////////////////////////////////////////////////////////////////////////////////////////////Индекс
        private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (e.ColumnIndex == 0)
            {
                e.Value = e.RowIndex+1;
            }
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            



        }
        //////////////////////////////////////////////////////////////////////////////////////////////////Количевство символов
        private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {

            ((DataGridViewTextBoxColumn)dataGridView1.Columns[1]).MaxInputLength = 4;

            ((DataGridViewTextBoxColumn)dataGridView1.Columns[2]).MaxInputLength =5;

            ((DataGridViewTextBoxColumn)dataGridView1.Columns[4]).MaxInputLength = 11;

        }

//////////////////////////////////////////////////////////////////////////////////////////////////Обработка ошибки с сообщением
        private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            MessageBox.Show("Ошибка ввода!");
            e.ThrowException = false;
        }



    
 

     

       

  

      



      
        }

    
//////////////////////////////////////////////////////////////////////////////////////////////////Фильтрация по колонке адрес
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
  (dataGridView1.DataSource as DataTable).DefaultView.RowFilter= $"Адрес LIKE'%{textBox1.Text}%'";

        }

      
  
  

        private void button1_Click(object sender, EventArgs e)
        {
            (dataGridView1.DataSource as DataTable).DefaultView.RowFilter = string.Empty;
            textBox1.Clear();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            int a = dataGridView1.CurrentRow.Index;
            dataGridView1.Rows.Remove(dataGridView1.Rows[a]);
        }

       

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch(comboBox1.SelectedIndex)
            {
                case 0:
                    (dataGridView1.DataSource as DataTable).DefaultView.RowFilter = "Цена<= 2000";
                    break;

                case 1:
                    (dataGridView1.DataSource as DataTable).DefaultView.RowFilter = "Цена >= 2000 AND Цена <=6000 ";
                    break;

                case 2:
                    (dataGridView1.DataSource as DataTable).DefaultView.RowFilter = "Цена >= 6000 AND Цена <=10000 ";
                    break;

                case 3:
                    (dataGridView1.DataSource as DataTable).DefaultView.RowFilter = "Цена >= 10000 AND Цена <=15000 ";
                    break;


                case 4:
                    (dataGridView1.DataSource as DataTable).DefaultView.RowFilter = "Цена >= 15000 AND Цена <=25000 ";
                    break;


                case 5:
                    (dataGridView1.DataSource as DataTable).DefaultView.RowFilter = "Цена >= 25000 ";
                    break;



            }
        }

///////////////////Добавление новой строки
        private void button3_Click(object sender, EventArgs e)
        {
            dataGridView1.Rows.Add();
        }

    
    }
}



Как написано в ошибке, в DataSource добавлять надо.
То есть в

Может быть через DataTable.NewRow Method (System.Data) | Microsoft Docs, и может быть еще BindingSource нужен. В винформс какая-то мутная фигня с биндингами, в WPF проще :kolobokcrossing:

https://stackoverflow.com/a/18915536/964478

Ну я WPF не знаю , а с# недавно познакомился , пишу курсовую. Может у вас есть идеи как реализовать? Ищу в инете и примеры как только добавить строку черех TextBox, просто пустой нету. Кстати , удаление нормально работает, хотя это конечно не добавление…

Так выше ж написано.
Если DataSource используется, то через то, что в нем, и надо данные менять.

Додумался :grinning:

     private void button3_Click(object sender, EventArgs e)
        {
            (dataGridView1.DataSource as DataTable).Rows.Add();
         
        }

Проще сохранить

в поле класса вместо локальной переменой функции.