powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как обновить данные в DataGrid?
6 сообщений из 6, страница 1 из 1
Как обновить данные в DataGrid?
    #38084234
SanSagittarius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята, помогите разобраться с процедурой обновления записи в DataGrid. Признаюсь, я очередной самоучка, который добрался до Visual Studio, поэтому мучаюсь над такими, наверняка, простыми задачами...

Сделал форму с поиском, куда вываливаются записи по критерию Like из базы MS Access, после чего по клику выдается инфа по конкретной записи. До этого момента все получилось более-менее сделать.

Дальше пытаюсь отредактировать эту конкретную запись (по задумке - вызываю функцию редактирования) и здесь у меня возник глобальный затык... (((

Код привожу здесь:

Код: vbnet
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.
Imports System.Data.OleDb
Public Class Form1

    Public DS As DataSet
    Private DATASET2 As DataSet
    Public DA As OleDb.OleDbDataAdapter
    Public FirstCell As DataGridViewCell

    Private CO As New OleDb.OleDbConnection("Data Source=""C:\DBDocs\Docs_be.accdb"";User ID=Admin;Provider=""Microsoft.ACE.OLEDB.12.0"";")

    Private CB As OleDb.OleDbCommandBuilder
    Dim COMMAND = New OleDbCommand

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub


    Private Sub DataGridView1_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick

        Dim cell As DataGridViewCell = CType(DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex), DataGridViewCell) 

        Me.TextBox1.Text = cell.Value.ToString 
        Me.TextBox2.Text = DataGridView1.Columns(e.ColumnIndex).HeaderText 
        Dim FirstCell As DataGridViewCell = CType(DataGridView1.Rows(e.RowIndex).Cells(0), DataGridViewCell)
        Me.TextBox3.Text = FirstCell.Value.ToString
        Dim DS As New DataSet
        If CO.State = ConnectionState.Closed Then CO.Open() 
        DA = New OleDb.OleDbDataAdapter("Select * From [Документы] where ([Код] = " & FirstCell.Value.ToString & ")", CO)
        CB = New OleDb.OleDbCommandBuilder(DA)

        DA.Fill(DS, "Документы")
        DataGridView2.DataSource = DS.Tables("Документы")
        CO.Close()
    End Sub

    Private Sub Button2_click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 'ByVal sender As System.Object, ByVal e As System.EventArgs

        CreateCmdsAndUpdate("Data Source=""C:\DBDocs\Docs_be.accdb"";User ID=Admin;Provider=""Microsoft.ACE.OLEDB.12.0"";", "Select * From Документы")

    End Sub


    Private Sub TextForFind_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextForFind.TextChanged
        Dim CO As New OleDbConnection("Data Source=""C:\DBDocs\Docs_be.accdb"";User ID=Admin;Provider=""Microsoft.ACE.OLEDB.12.0"";")
        CO.Open()
        Dim COMMANDFORVIEW As New System.Data.OleDb.OleDbCommand("Select * From [Документы] where ([Тип документа] like '%" & Me.TextForFind.Text & "%')", CO)
        Dim ADAPTER As New OleDbDataAdapter(COMMANDFORVIEW)

        Dim DATASET2 As New DataSet

        ADAPTER.Fill(DATASET2, "Документы")
        DataGridView1.DataSource = DATASET2
        DataGridView1.DataMember = "Документы"
        CO.Close()
    End Sub


    Public Function CreateCmdsAndUpdate(ByVal connectionString As String, ByVal queryString As String) As DataSet

        Using connection As New OleDbConnection(connectionString)
            Dim adapter As New OleDbDataAdapter()
            adapter.SelectCommand = New OleDbCommand(queryString, connection)
            Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(adapter)

            connection.Open()

            Dim customers As DataSet = New DataSet
            Dim DS As DataSet = New DataSet
            adapter.Fill(DS)
 
            COMMAND.CommandText = "UPDATE [Документы] SET [Тип документа] = ?, [Номер] = ?  WHERE [Код] = ?"
            COMMAND.Parameters.Add("Тип документа", OleDbType.VarWChar, 50, "Тип документа")
            COMMAND.Parameters.Add("Номер", OleDbType.VarWChar, 50, "Номер")
            COMMAND.Parameters.Add(New OleDbParameter("Original_Код", OleDbType.Integer, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "Код", System.Data.DataRowVersion.Original, Nothing))
            adapter.UpdateCommand = COMMAND
            COMMAND.Connection = connection

            adapter.Update(DS)

            Dim rows() As DataRow = customers.Tables(0).Select(Nothing, Nothing, DataViewRowState.Added)
            adapter.Update(rows)

            Return customers
        End Using
    End Function


End Class



Понимаю, что код криворукий, но это, можно сказать мой "первый блин", за что прошу вашего понимания и очень надеюсь на помощь... Где я накосячил?
...
Рейтинг: 0 / 0
Как обновить данные в DataGrid?
    #38084242
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
SanSagittariusГде я накосячил?
Вы попытались все полностью написать вручную.
Это возможно только после того, как вы изучите все применяемые Вами классы.
Сделайте все в дизайнере
...
Рейтинг: 0 / 0
Как обновить данные в DataGrid?
    #38084499
SanSagittarius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Сделайте все в дизайнере

Полностью с Вами согласен - по-хорошему, нужно сначала все изучить, а потом уж строить. Но не всегда это получается... Кроме того, в изученных мной материалах рассматриваются несколько иные варианты - моего случая я не нашел, поэтому и решил попытать счастья здесь...

Собственно, формы я как-раз строил в дизайнере, после чего, следуя мануалам, пытался допилить то того, что мне нужно было. Сейчас в формах все отображается корректно (я писал об этом выше) и можно изменять записи. Но изменения не сохраняются ни при переходе на другую запись, ни при нажатии на кнопку "Сохранить". Собственно, в этом проблема...

Если подскажете, как облегчить себе жизнь и заставить данные сохраняться, сделав некие настройки в дизайнере - буду весьма признателен!
...
Рейтинг: 0 / 0
Как обновить данные в DataGrid?
    #38085352
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
SanSagittarius,
Через ADAPTER.Update(DATASET2, "Документы")
Как записать dataSet в Access базу?

Подробно, от первоисточника
...
Рейтинг: 0 / 0
Как обновить данные в DataGrid?
    #38085668
SanSagittarius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,

Огромное спасибо за помощь и за ссылочки! Принялся за штудирование - лишним точно не будет.

Однако, проблема все же не поддалась решению ((((

На данную корректировку
Код: vbnet
1.
ADAPTER.Update(DATASET2, "Документы")



реагирует следующим образом:
Код: vbnet
1.
2.
"в System.Threading.ThreadHelper.ThreadStart()</StackTrace><ExceptionString>System.ArgumentNullException: Значение не может быть неопределенным."
"Имя параметра: dataSet"



Такое ощущение, что DataSet2 не был объявлен, хотя я его объявлял пабликом:
Код: vbnet
1.
Private DATASET2 As DataSet
...
Рейтинг: 0 / 0
Как обновить данные в DataGrid?
    #38085832
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
SanSagittarius,

Как минимум Вы его еще второй раз определили в
Private Sub TextForFind_TextChanged.
Трудно разобраться в чужих ошибках

Выглядит на C# примерно так

Код: 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.
namespace TCH_storage
{
    public partial class FormDicPlace : Form
    {
	/*
	Приблизительно такой код генерируется в дизайнере. 
	В действительности его в данном событии  нет
	*/

	private DataTable dtPlace = new DataTable("Place");
	...
	private DataSet ds = new DateSet()
	...
	ds.Tables.Add(dt);
	...
            placeBindingSource.DataSource = ds;
            placeBindingSource.DataMember = "Place";
	...
            placeDataGridView.DataSource = placeBindingSource;
	//Конец того, чего нет на форме в действительности

        public FormDicPlace()
        {
            InitializeComponent();
        }

        private void FormDicPlace_Load(object sender, EventArgs e)
        {
            placeTableAdapter.Fill(dtPlace); 
            dtPlace.RowChanged += dtPlaceRowChanged;
            dtPlace.RowDeleted += dtPlaceRowChanged;
        }

	// Это выполняется автоматически при переходе на другую строку, если есть изменения в ячейках
        void dtPlaceRowChanged(object sender, RowChangeEvent e)
        {
            placeTableAdapter.Update(dtPlace);
        }
	
	//Это вызывается, например, в событии  нажатия кнопки Сохранить
	void save () 
	{
	placeBindingSource.EndEdit(); //Это вызывает событие dtPlaceRowChanged
	}
    }
}
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как обновить данные в DataGrid?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]