Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Редактирование записей через datagridview


Автор: Maza122 6.11.2015, 08:14
Здравствуйте. Помогите пожалуйста доработать программу.
У меня имеется форма. На ней datagridview, кнопки: "Сохранить изменения", "Поиск" и др. В datagridview отображаются данные из базы acceess.
На начальном этапе, когда форма загружается, я могу менять записи в datagridview, и, по нажатию кнопки "сохранить изменения", записи меняются в БД. Далее, в поле поиска я ввожу фамилию и имя, и, по нажатию кнопки "Поиск" , соответствующие записи отображаются. 
Вот при загрузке формы:
Код

private void Man_Load(object sender, EventArgs e)
        {
            da = new OleDbDataAdapter("Select * From [TPersons]", new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.15.0;Data Source=C:\Users\Use\Documents\Visual Studio 2012\Projects\АСОИУ\Database.accdb;Persist Security Info=False"));
            OleDbCommandBuilder bulder = new OleDbCommandBuilder(da);
            da.UpdateCommand = bulder.GetUpdateCommand();
            da.Fill(НаборДанных);
            dataGridView1.DataSource = НаборДанных.Tables[0];
        //    dataGridView1.AllowUserToAddRows = false;
            
        }
 
    }


Вот кнопка "Сохранить изменения
Код

private void button5_Click(object sender, EventArgs e)
        {
 
           
               da.Update(НаборДанных.Tables[0]);
               MessageBox.Show("Данные обновлены");
 
            
 
        }     


Вот кнопка "поиск"

Код

private void button3_Click(object sender, EventArgs e)
        {
            string Poisk, Poisk1, query;
            Poisk = txtpoisk.Text;
            Poisk1 = txtpoisk1.Text;
            ConnectTo1();
            connection.Open();
            OleDbCommand command = new OleDbCommand();
            command.Connection = connection;
            if (txtpoisk1.Text == "")
                query = "Delete * from TPersons where Фамилия = '" + Poisk + "' ";
            else if (txtpoisk.Text == "")
                query = "Delete * from TPersons where Имя ='" + Poisk1 + "'  ";
            else
                query = "Delete * from TPersons where Фамилия = '" + Poisk + "' AND Имя = '" + Poisk1 + "' ";
                    MessageBox.Show("Запись удалена. Для просмотра изменений нажмите кнопку 'Обновить'");
                   
                    command.CommandText = query;
                    OleDbDataAdapter da = new OleDbDataAdapter(command);
                    DataTable dt = new DataTable();
                    da.Fill(dt);                                                                               
                connection.Close();
                dataGridView1.Columns.Clear();         
        }

У меня два вопроса:
1) При попытке повторного изменения данных, записи не сохраняются. Приходится закрывать и открывать форму. Как исправить?
2) Как сделать так, чтобы после поиска, я также мог редактировать записи?
Для удобства, прилагаю проект.
Очень прошу о помощи. Помогите разобраться. 

Автор: chupachups 8.11.2015, 20:36
Цитата

   query = "Delete * from TPersons where Фамилия =
   

Это ТАК вас учат делать поиск данных ???

Код обработчика button3_Click вообще никакой логикой не объясняется:
1) если предположить, что вышеуказанный косяк просто опечатка, то поисковые данные надо заливать в тот же набор данных, который участвует в обработчике сохранения - НаборДанных.Tables[0].Clear(); da.Fill(НаборДанных.Tables[0]);
но для этого необходимо чтобы da из обработчика button5_Click был объектом класса формы (т.к. в button3_Click есть свой da)
2) зачем в конце удаляются все колонки в гриде - dataGridView1.Columns.Clear() ?
3) и вообще непонятно как отображаются найденные строки, если грид подвязан на НаборДанных.Tables[0], а заливка найденных производится в dt?

Я думаю, что программа всегда будет корректно работать (за исключением  опечаток по невнимательности), если кодописатель будет хотя бы читать свой собственный код, я уж не говорю о его отработке в голове.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Redaktirovaniye-zapisey-cherez-datagridview-id563c3759ae2015127b8b4567#findElement_E7045_563f8806ae2015ad768b47de_0

Автор: oloko900 11.2.2018, 23:12
Модератор: Сообщение скрыто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)