Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/57: Рейтинг темы: голосов - 57, средняя оценка - 4.63
2 / 2 / 0
Регистрация: 15.05.2009
Сообщений: 93

Обновить данные DataGridView из другой формы

15.05.2009, 22:17. Показов 11509. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здрасте всем.Я здесь в первый раз так что сразу прошу прощения если такой вопрос уже был на форуме.
Вобщем задача тривиальная,но у меня почемуто неполучается.
Есть форма,на ней есть datagridview и забанденные к ней textBox.Всё работает всё хорошо.Перехожу по строчкам в datagridview и вижу как меняется информация.Теперь решил зделать "Edit-Update".Кинул кнопку,например меняю что то в текст боксах нажимаю на кнопку:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count == 0) return;
 
            txt_ClientNameB.Text = dataGridView1.SelectedRows[0].Cells["ClientName"].Value.ToString();
            txt_AddressB.Text = dataGridView1.SelectedRows[0].Cells["Address"].Value.ToString();
            //txt_ClientNameB.DataBindings.Clear();
            //txt_ClientNameB.DataBindings.Add("Text", dataGridView1.SelectedRows[0].Cells["ClientName"], "Value");
            //txt_AddressB.DataBindings.Clear();
            //txt_AddressB.DataBindings.Add("Text", dataGridView1.SelectedRows[0].Cells["Address"], "Value");
        }
 
        private void txt_ClientNameB_TextChanged(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count == 0) return;
            dataGridView1["ClientName", dataGridView1.SelectedRows[0].Index].Value = ((TextBox)sender).Text;
        }
 
        private void txt_AddressB_TextChanged(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count == 0) return;
            dataGridView1["Address", dataGridView1.SelectedRows[0].Index].Value = ((TextBox)sender).Text;
        }
 
        //Update,Insert and Save
        private void frmImagesStore_Load(object sender, EventArgs e)
        {
            string comStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Data\\Client_DB.mdb";
            string sql = "select StatusInfo,ClientName,Address,City,PostalCode,Telephone,Fax,Cell,Email,InsertDate,Photo,FinishDate from TBL_Clients ";
            da = new System.Data.OleDb.OleDbDataAdapter(sql, comStr);
            da.Fill(dss);
            da.UpdateCommand = new OleDbCommand();
            da.UpdateCommand.CommandText = @"UPDATE TBL_Clients 
                                            SET ClientName =
                                            @ClientName,Address =
                                            @Address,City = 
                                            @City,PostalCode =
                                            @PostalCode,Telephone = 
                                            @Telephone,Fax =
                                            @Fax,Cell = 
                                            @Cell,Email =
                                            @Email
                                            WHERE IDClient = 
                                            @IDClient";
            da.UpdateCommand.Parameters.Add("@ClientName", OleDbType.Char, 10, "ClientName");
            da.UpdateCommand.Parameters.Add("@Address", OleDbType.Char, 10, "Address");
            da.UpdateCommand.Parameters.Add("@City", OleDbType.Char, 10, "City");
            da.UpdateCommand.Parameters.Add("@PostalCode", OleDbType.Char, 10, "PostalCode");
            da.UpdateCommand.Parameters.Add("@Telephone", OleDbType.Char, 10, "Telephone");
            da.UpdateCommand.Parameters.Add("@Fax", OleDbType.Char, 10, "Fax");
            da.UpdateCommand.Parameters.Add("@Cell", OleDbType.Char, 10, "Cell");
            da.UpdateCommand.Parameters.Add("@Email", OleDbType.Char, 10, "Email");
            da.UpdateCommand.Parameters.Add("@IDClient", OleDbType.Integer, 10, "IDClient");
            da.InsertCommand = new OleDbCommand();
            da.InsertCommand.Connection = da.SelectCommand.Connection;
            da.InsertCommand.CommandText = @"INSERT INTO TBL_Clients (IDClient,
                                            ClientName,
                                            Address,
                                            City,
                                            PostalCode,
                                            Telephone,
                                            Fax,
                                            Cell,
                                            Email) VALUES
                                           (@IDClient,
                                            @ClientName,
                                            @Address,
                                            @City,
                                            @PostalCode,
                                            @Telephone,
                                            @Fax,
                                            @Cell,
                                            @Email)  ";
            da.InsertCommand.Parameters.Add("@ClientName", OleDbType.Char, 10, "ClientName");
            da.InsertCommand.Parameters.Add("@Address", OleDbType.Char, 10, "Address");
            da.InsertCommand.Parameters.Add("@City", OleDbType.Char, 10, "City");
            da.InsertCommand.Parameters.Add("@PostalCode", OleDbType.Char, 10, "PostalCode");
            da.InsertCommand.Parameters.Add("@Telephone", OleDbType.Char, 10, "Telephone");
            da.InsertCommand.Parameters.Add("@Fax", OleDbType.Char, 10, "Fax");
            da.InsertCommand.Parameters.Add("@Cell", OleDbType.Char, 10, "Cell");
            da.InsertCommand.Parameters.Add("@Email", OleDbType.Char, 10, "Email");
            da.InsertCommand.Parameters.Add("@IDClient", OleDbType.Integer, 10, "IDClient");
            da.DeleteCommand = new OleDbCommand();
            da.DeleteCommand.CommandText = "Delete from TBL_Clients where IDClient=@IDClient";
            da.DeleteCommand.Parameters.Add("@IDClient", OleDbType.Integer, 10, "IDClient");
            dataGridView1.DataSource = dss.Tables[0];
            da.InsertCommand.Connection = da.SelectCommand.Connection;
            da.UpdateCommand.Connection = da.SelectCommand.Connection;
            da.DeleteCommand.Connection = da.SelectCommand.Connection;
        }
 
private void button5_Click(object sender, EventArgs e)
        {
            da.Update(dss);
            MessageBox.Show("Update successful!.","Message");
}
и всё вроде нормально работает.
Теперь решил немного усовершенствовать зделать "Update" через дополнительную форму.Например выбераю строку в datagridview ,нажимаю на "Edit" и должно открытся новая форма на кот. должны быть забанденные текст боксы,и из этой фомы хочу зделать "Update".
Покажите на примере как это можно зделать.
Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.05.2009, 22:17
Ответы с готовыми решениями:

Обновить DatagridView из другой формы...
Заполняю DataGridView нажатием на кнопку таким образом: DBMediaCatalogDataSet.АудиозаписиDataTable dt = new...

Обновить datagridview из другой формы после запроса
Добрый вечер. Подскажите пожалуйста как можно обновит datagridview из другой формы после запроса. Пытаюсь сделать фильтрацию по записям...

Обновить datagridview после внесение изменений в БД с другой формы
Всем привет. Имею 2 формы: 1-я отображает в dgv данные, 2-я принимает выбранную строку для удаления, обновления и добавляет новые...

27
Комбайнёр
 Аватар для MAcK
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
24.05.2009, 11:28
Студворк — интернет-сервис помощи студентам
Пример
C#
1
2
            DataSet set = new DataSet();
            set.Tables[1].Columns[1].AutoIncrement
Это поможет?
1
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
25.05.2009, 04:03
Цитата Сообщение от sharki Посмотреть сообщение
WHERE IDClient =@IDClient
Обновление использует это поле, что бы найти нужную для изменения строку, но в select-запросе это поле не выбирается.
На счет insert, тоже интересно.. IDClient - должен указываться, а кто его генерирует?
1
2 / 2 / 0
Регистрация: 15.05.2009
Сообщений: 93
25.05.2009, 05:17  [ТС]
It-Skyline,Green Спасибо большое за вашу помощ.Так как вы мне уже разживали так оно должно работать ну минимум на 1000 %,а оно никак.Может проблемма совсем в другом.
Постараюсь обьяснить,и вам будет ясней и вы мне сможете помоч.
Вот смотрите,на форме есть dategridview, прибанденные к ней текстбоксы и один забанденный picturebox.
Вот так загружаются данные ,и вот так бандятся:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
 void ShowImageFromDatabase()
        {
            try
            {
                {
                    conn = new OleDbConnection();
                    conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Data\\Client_DB.mdb";
                    //Initialize adapter.
                    command = new OleDbCommand();
                    command.Connection = conn;
                    adapter = new OleDbDataAdapter(command);
                    adapter = new OleDbDataAdapter("Select * from TBL_Clients", conn);
                  
                    //Initialize Dataset.
                    ds = new DataSet();
                    dataTable = ds.Tables.Add("Clients");
 
                    //Fill dataset with Images
                    adapter.Fill(ds, "Clients");
                    conn.Close();
 
                    //Fill Grid with dataset.
                    dataGridView1.DataSource = ds.Tables["Clients"];
                    txt_ClientNameB.DataBindings.Clear();
                    this.txt_ClientNameB.DataBindings.Add("Text", dataTable, "ClientName", true, DataSourceUpdateMode.OnPropertyChanged);
                    txt_AddressB.DataBindings.Clear();
                    this.txt_AddressB.DataBindings.Add("Text", dataTable, "Address", true, DataSourceUpdateMode.OnPropertyChanged);
                    txt_CityProv.DataBindings.Clear();
                    this.txt_CityProv.DataBindings.Add("Text", dataTable, "City", true, DataSourceUpdateMode.OnPropertyChanged);
                    txt_PC.DataBindings.Clear();
                    this.txt_PC.DataBindings.Add("Text", dataTable, "PostalCode", true, DataSourceUpdateMode.OnPropertyChanged);
                    txt_TelephoneB.DataBindings.Clear();
                    this.txt_TelephoneB.DataBindings.Add("Text", dataTable, "Telephone", true, DataSourceUpdateMode.OnPropertyChanged);
                    txt_fax.DataBindings.Clear();
                    this.txt_fax.DataBindings.Add("Text", dataTable, "Fax", true, DataSourceUpdateMode.OnPropertyChanged);
                    txt_cell.DataBindings.Clear();
                    this.txt_cell.DataBindings.Add("Text", dataTable, "Cell", true, DataSourceUpdateMode.OnPropertyChanged);
                    txt_email.DataBindings.Clear();
                    this.txt_email.DataBindings.Add("Text", dataTable, "Email", true, DataSourceUpdateMode.OnPropertyChanged);
                    txt_InsertDateB.DataBindings.Clear();
                    this.txt_InsertDateB.DataBindings.Add("Text", dataTable, "InsertDate", true, DataSourceUpdateMode.OnPropertyChanged);
                    txt_LastActivDateB.DataBindings.Clear();
                    this.txt_LastActivDateB.DataBindings.Add("Text", dataTable, "FinishDate", true, DataSourceUpdateMode.OnPropertyChanged);
                    pictureBox1.DataBindings.Clear();                   
                    this.pictureBox1.DataBindings.Add("Image", dataTable, "Photo", true, DataSourceUpdateMode.OnPropertyChanged);
                   
                }
}
 
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
}
//When user changes row selection, display image of selected row in picture box.
        private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                //Get image data from gridview column.
                byte[] imageData = (byte[])dataGridView1.Rows[e.RowIndex].Cells["Photo"].Value;
 
                //Initialize image variable
                Image newImage;
                //Read image data into a memory stream
                using (MemoryStream ms = new MemoryStream(imageData, 0, imageData.Length))
                {
                    ms.Write(imageData, 0, imageData.Length);
 
                    //Set image variable value using memory stream.
                    newImage = Image.FromStream(ms, true);
                }
 
                //set picture
                pictureBox1.Image = newImage;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
всё это дело грузится при открытии формы.
Теперь я создал новый адаптер и новый датасет и в formLoad пытаюсь зделать update:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
string comStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Data\\Client_DB.mdb";
            string sql = "Select StatusInfo,ClientName,Address,City,PostalCode,Telephone,Fax,Cell,Email,InsertDate,Photo,Link,FinishDate,IDClient from TBL_Clients ";
            da = new System.Data.OleDb.OleDbDataAdapter(sql, comStr);
 
            //dss.Tables["Clients"].Columns["IDClient"].AutoIncrement = true;
            
            da.Fill(dss);
 
            //dss.AcceptChanges();
            da.UpdateCommand = new OleDbCommand();
            da.UpdateCommand.CommandText = @"UPDATE TBL_Clients 
                                            SET ClientName =
                                            @ClientName,Address =
                                            @Address,City = 
                                            @City,PostalCode =
                                            @PostalCode,Telephone = 
                                            @Telephone,Fax =
                                            @Fax,Cell = 
                                            @Cell,Email =
                                            @Email
                                            WHERE IDClient = 
                                            @IDClient";
            da.UpdateCommand.Parameters.Add("@ClientName", OleDbType.Char, 10, "ClientName");
            da.UpdateCommand.Parameters.Add("@Address", OleDbType.Char, 10, "Address");
            da.UpdateCommand.Parameters.Add("@City", OleDbType.Char, 10, "City");
            da.UpdateCommand.Parameters.Add("@PostalCode", OleDbType.Char, 10, "PostalCode");
            da.UpdateCommand.Parameters.Add("@Telephone", OleDbType.Char, 10, "Telephone");
            da.UpdateCommand.Parameters.Add("@Fax", OleDbType.Char, 10, "Fax");
            da.UpdateCommand.Parameters.Add("@Cell", OleDbType.Char, 10, "Cell");
            da.UpdateCommand.Parameters.Add("@Email", OleDbType.Char, 10, "Email");
            da.UpdateCommand.Parameters.Add("@IDClient", OleDbType.Integer, 10, "IDClient");
            da.InsertCommand = new OleDbCommand();
            da.InsertCommand.Connection = da.SelectCommand.Connection;
            da.InsertCommand.CommandText = @"INSERT INTO TBL_Clients (
                                            ClientName,
                                            Address,
                                            City,
                                            PostalCode,
                                            Telephone,
                                            Fax,
                                            Cell,
                                            Email,IDClient) VALUES
                                           (
                                            @ClientName,
                                            @Address,
                                            @City,
                                            @PostalCode,
                                            @Telephone,
                                            @Fax,
                                            @Cell,
                                            @Email,@IDClient)  ";
            da.InsertCommand.Parameters.Add("@ClientName", OleDbType.Char, 10, "ClientName");
            da.InsertCommand.Parameters.Add("@Address", OleDbType.Char, 10, "Address");
            da.InsertCommand.Parameters.Add("@City", OleDbType.Char, 10, "City");
            da.InsertCommand.Parameters.Add("@PostalCode", OleDbType.Char, 10, "PostalCode");
            da.InsertCommand.Parameters.Add("@Telephone", OleDbType.Char, 10, "Telephone");
            da.InsertCommand.Parameters.Add("@Fax", OleDbType.Char, 10, "Fax");
            da.InsertCommand.Parameters.Add("@Cell", OleDbType.Char, 10, "Cell");
            da.InsertCommand.Parameters.Add("@Email", OleDbType.Char, 10, "Email");
            da.InsertCommand.Parameters.Add("@IDClient", OleDbType.Integer, 10, "IDClient");
            da.DeleteCommand = new OleDbCommand();
            da.DeleteCommand.CommandText = "Delete from TBL_Clients where IDClient=@IDClient";
            da.DeleteCommand.Parameters.Add("@IDClient", OleDbType.Integer, 10, "IDClient");
 
            dataGridView1.DataSource = dss.Tables[0];
            da.InsertCommand.Connection = da.SelectCommand.Connection;
            da.UpdateCommand.Connection = da.SelectCommand.Connection;
            da.DeleteCommand.Connection = da.SelectCommand.Connection;
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
private void button5_Click(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count > 0)
            {
                UpdateForm UpdateForm = new UpdateForm();
 
                UpdateForm.txt_ClientName.Text = dataGridView1["ClientName", dataGridView1.SelectedRows[0].Index].Value.ToString();
                UpdateForm.txt_Address.Text = dataGridView1["Address", dataGridView1.SelectedRows[0].Index].Value.ToString();
 
                if (UpdateForm.ShowDialog() == DialogResult.OK)
                {
                    
                    dataGridView1["ClientName", dataGridView1.SelectedRows[0].Index].Value = UpdateForm.txt_ClientName.Text;
                    dataGridView1["Address", dataGridView1.SelectedRows[0].Index].Value = UpdateForm.txt_Address.Text;
 
                    da.Update(ds);
                }
            }
            else
            {
                MessageBox.Show(".....");
            }
 
        }
Может быть здесь конфликт ???может в этом проблемма???
Спасибо.
1
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
26.05.2009, 02:16
Положите лучше весь проект и БД, если не сложно.
0
2 / 2 / 0
Регистрация: 15.05.2009
Сообщений: 93
26.05.2009, 02:42  [ТС]
Спасибо большое, конечно несложно только лишнее уберу.
0
2 / 2 / 0
Регистрация: 15.05.2009
Сообщений: 93
26.05.2009, 08:13  [ТС]
Вот.
Вложения
Тип файла: rar cl.rar (1.28 Мб, 85 просмотров)
1
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
28.05.2009, 03:43
Фуф, заглянул в ваш проект и ужаснулся! Искренне извиняюсь, но это не проект, а то, что творится в старом уличном туалете жарким летом. Мне кажется вы сами не понимаете, что там творится. Например, вы знаете, что при запуске программы в ds две таблицы, обе заполнены одинаковыми данными?

Теперь по делу. Обновление не происходит, т.к. такое изменение не вызывает событие изменения строки в DataTable (при пользовательском изменении ячейки DataGridView его сам генерирует, от того и работает). Выход, или в ручную метить строку в DataTable как изменненую, либо (проще) вставить BindingSource между DataGridView и ds.
0
2 / 2 / 0
Регистрация: 15.05.2009
Сообщений: 93
28.05.2009, 08:44  [ТС]
Green спасибо большое что посмотрели проект.Оправдыватся нестану,код(если это можно назвать так) делали до меня двое.Вы же видите только кусок программы,если бы увидели всю у вас бы были другие(не очень лестные слова).Теперь они благополучно свалили,времени на переделку программы нет,поэтому и стараюсь уже доделать как есть и здыхаться.Потому как сам я только из пелёнок.Но такого бы точьно ненакрутил.Ладно проехали.За то что показали на ошибки (при запуске программы в ds две таблицы)огромное спасибо.Попробую поиграть с BindingSource между DataGridView и ds.Ещё раз огромное спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.05.2009, 08:44
Помогаю со студенческими работами здесь

DGV: Обновить данные из другой формы
Я знаю что этот вопрос задавали кучу раз, но я не могу понять. Заполняю dataGridView способом: ...

Редактировать данные из таблицы DataGridView в textBox другой формы
Помогите прощу! У меня имеется две формы. на первой форме имеется таблица dataGridView1(источник данных хранится в базе SQL server) и...

Обновить данные в DataGridView из другой формы
На Form1 есть DataGridView. Заполняю его вот так Private Sub FillGridRecipe() GridViewRecipe.Select() db = New...

Как правильно обновить DataGridView при возврате из другой формы
Опять что-то конструктор поломался:- Private Sub TabPage3_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load ...

Как добавить данные с текстбоксов одной формы в DataGridView другой?
Всем доброго времени суток, встала такая проблема: не получается корректно добавить данные из textBox одной формы в datagridview другой,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru