Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 21.10.2021
Сообщений: 19
1

Возможность обращаться к данным по ячейкам и изменять их

21.03.2022, 10:01. Показов 1851. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть DataGridView, которая отображает данные из текстового документа.Помогите добавить возможность обращаться к данным по ячейкам, изменять их и сохранять . Вот код программы
VB.NET
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
Public Class Form1
    Dim index As String
    Private Sub ЗагрузитьToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ЗагрузитьToolStripMenuItem.Click
        Dim fName As String = IO.Path.Combine(Application.StartupPath, "tst.txt")
        Dim records() As String = IO.File.ReadAllLines(fName, System.Text.Encoding.Default)
        Dim bb As New List(Of Biography)
        For Each rr As String In records
            bb.Add(New Biography(rr.Split(","c)))
        Next
        DataGridView1.DataSource = Nothing
        DataGridView1.DataSource = bb
    End Sub
 
    Private Sub МоскваToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles МоскваToolStripMenuItem.Click
        Dim fName As String = IO.Path.Combine(Application.StartupPath, "tst.txt")
        Dim records() As String = IO.File.ReadAllLines(fName, System.Text.Encoding.Default)
        Dim bb As New List(Of Biography)
        For Each rr As String In records
            bb.Add(New Biography(rr.Split(","c)))
        Next
        Dim sel = From b As Biography In bb Where b.Город = "Москва"
        DataGridView1.DataSource = Nothing
        If sel.Count > 0 Then
            DataGridView1.DataSource = sel.ToArray
        Else
            MsgBox("Нет данных!")
        End If
    End Sub
 
    Private Sub КалининградToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles КалининградToolStripMenuItem.Click
        Dim fName As String = IO.Path.Combine(Application.StartupPath, "tst.txt")
        Dim records() As String = IO.File.ReadAllLines(fName, System.Text.Encoding.Default)
        Dim bb As New List(Of Biography)
        For Each rr As String In records
            bb.Add(New Biography(rr.Split(","c)))
        Next
        Dim sel = From b As Biography In bb Where b.Город = "Калининград"
        DataGridView1.DataSource = Nothing
        If sel.Count > 0 Then
            DataGridView1.DataSource = sel.ToArray
        Else
            MsgBox("Нет данных!")
        End If
    End Sub
 
    Private Sub ТверьToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ТверьToolStripMenuItem.Click
        Dim fName As String = IO.Path.Combine(Application.StartupPath, "tst.txt")
        Dim records() As String = IO.File.ReadAllLines(fName, System.Text.Encoding.Default)
        Dim bb As New List(Of Biography)
        For Each rr As String In records
            bb.Add(New Biography(rr.Split(","c)))
        Next
        Dim sel = From b As Biography In bb Where b.Город = "Тверь"
        DataGridView1.DataSource = Nothing
        If sel.Count > 0 Then
            DataGridView1.DataSource = sel.ToArray
        Else
            MsgBox("Нет данных!")
        End If
    End Sub
 
    Private Sub ИвановоToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ИвановоToolStripMenuItem.Click
        Dim fName As String = IO.Path.Combine(Application.StartupPath, "tst.txt")
        Dim records() As String = IO.File.ReadAllLines(fName, System.Text.Encoding.Default)
        Dim bb As New List(Of Biography)
        For Each rr As String In records
            bb.Add(New Biography(rr.Split(","c)))
        Next
        Dim sel = From b As Biography In bb Where b.Город = "Иваново"
        DataGridView1.DataSource = Nothing
        If sel.Count > 0 Then
            DataGridView1.DataSource = sel.ToArray
        Else
            MsgBox("Нет данных!")
        End If
    End Sub
 
    Private Sub ВладимирToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ВладимирToolStripMenuItem.Click
        Dim fName As String = IO.Path.Combine(Application.StartupPath, "tst.txt")
        Dim records() As String = IO.File.ReadAllLines(fName, System.Text.Encoding.Default)
        Dim bb As New List(Of Biography)
        For Each rr As String In records
            bb.Add(New Biography(rr.Split(","c)))
        Next
        Dim sel = From b As Biography In bb Where b.Город = "Владимир"
        DataGridView1.DataSource = Nothing
        If sel.Count > 0 Then
            DataGridView1.DataSource = sel.ToArray
        Else
            MsgBox("Нет данных!")
        End If
    End Sub
 
    Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
        Dim index As Integer
        index = e.RowIndex
        Dim selectedrow As DataGridViewRow
        selectedrow = DataGridView1.Rows(index)
        TextBoxFIO.Text = selectedrow.Cells(0).Value.ToString
        TextBoxDen.Text = selectedrow.Cells(1).Value.ToString
        TextBoxMesyac.Text = selectedrow.Cells(2).Value.ToString
        TextBoxGOD.Text = selectedrow.Cells(3).Value.ToString
        TextBoxGorod.Text = selectedrow.Cells(4).Value.ToString
        TextBoxTel.Text = selectedrow.Cells(5).Value.ToString
        TextBoxMail.Text = selectedrow.Cells(6).Value.ToString
    End Sub
End Class
Public Class Biography
    Public Sub New(ByVal pp() As String)
        _ФИО = pp(0)
        _ДеньДР = CInt(pp(1))
        _МесяцДР = CInt(pp(2))
        _ГодДР = CInt(pp(3))
        _Город = pp(4)
        _Телефон = CLng(pp(5))
        _Почта = (pp(6))
    End Sub
    Public Property ФИО As String
    Public Property ДеньДР As Integer
    Public Property МесяцДР As Integer
    Public Property ГодДР As Integer
    Public Property Город As String
    Public Property Телефон As Long
    Public Property Почта As String
End Class
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.03.2022, 10:01
Ответы с готовыми решениями:

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

Как обращаться к ячейкам в DBGrid, чтобы записать их значения в формулу?
как обращаться к ячейкам в BDGrid? чтобы записать их значения в формулу

Как можно обращаться к ячейкам памяти, выделенными функцией malloc?
Сейчас прохожу курс CS50, там есть такой код: #include <cs50.h> #include <ctype.h> #include...

Сделать такой индексатор, чтобы можно было обращаться к ячейкам Excel
Не могу сообразить как сделать такой индексатор, чтобы можно было обращаться к ячейкам экселя ...

Как обращаться к данным структуры
Запуталась совсем,помогите пожалуйста..стыдно выкладывать "это"... typedef struct { char...

17
1976 / 1410 / 365
Регистрация: 26.06.2017
Сообщений: 4,009
21.03.2022, 11:22 2
1. ГородToolStripMenuItem_Click все эти методы надо убирать, а вместо них применять фильтрацию данных в DataGridView.
2. Вместо кода в DataGridView1_CellClick лучше применить привязку данных для чего в проект добавить BindingSource и его привязывать, и к DataGridView1 и к Тектбоксам. В этом случае обновление данных в любом месте будет транслироваться в источник, получить который можно также обратившись к BindingSource.

Добавлено через 5 минут
Quapches111, прикрепите тестовый файл "tst.txt", а то лень набивать данные.
0
0 / 0 / 0
Регистрация: 21.10.2021
Сообщений: 19
21.03.2022, 11:22  [ТС] 3
А как привязать BindingSource к DataGridView1 и к Тектбоксам ?
0
1976 / 1410 / 365
Регистрация: 26.06.2017
Сообщений: 4,009
21.03.2022, 11:26 4
И ещё, если проект не привязан к какой нибудь другой софтине, которая предоставляет данные в формате файла "tst.txt", то сразу переходите на хранение данных в базе данных, например MS Access, но лучше сразу сетевую типа MySQL.
Цитата Сообщение от Quapches111 Посмотреть сообщение
А как привязать BindingSource к DataGridView1 и к Тектбоксам ?
Quapches111, скиньте "tst.txt" я набросаю примерчик
0
0 / 0 / 0
Регистрация: 21.10.2021
Сообщений: 19
21.03.2022, 11:29  [ТС] 5
вот tst.txt
0
1976 / 1410 / 365
Регистрация: 26.06.2017
Сообщений: 4,009
21.03.2022, 14:09 6
Во вложении пример всего того, о чём я говорил. Но есть нюанс - не удалось использовать свойство Filter объекта BindingSource. Это связано с тем, что базовый список должен реализовать IBindingListView интерфейс. Конечно можно было написать такую коллекцию, но что-то лениво. Вот ссылка на обсуждение такой проблемы. Этот нюанс я обошёл иначе.
Вложения
Тип файла: zip DataBindingDemonstration.zip (83.9 Кб, 14 просмотров)
0
0 / 0 / 0
Регистрация: 21.10.2021
Сообщений: 19
21.03.2022, 14:18  [ТС] 7
А возможно как-то добавить кнопку SAVE для того, чтобы можно было изменять данные в ячейках DataGridView и сохранять изменения?
Также нужна еще кнопка добавления записи
0
1976 / 1410 / 365
Регистрация: 26.06.2017
Сообщений: 4,009
21.03.2022, 14:35 8
Цитата Сообщение от Quapches111 Посмотреть сообщение
чтобы можно было изменять данные в ячейках DataGridView и сохранять изменения?
Изменение данных доступно по двойному клику в ячейке DataGridView и автоматически передаётся в источник, т.е. список bb.
Для текстбоксов нужно обработать нажатие Enter (забыл указать об этом), а сейчас данные обновляются в источнике при потере фокуса текстбоксом.
0
0 / 0 / 0
Регистрация: 21.10.2021
Сообщений: 19
21.03.2022, 14:43  [ТС] 9
Нужно чтобы изменения сохранялись в tst.txt. Например, в datagridview я меняю все города на Москву, сохраняю и в текстовом файле, где города, везде должна стоять Москва.
Я просто еще новичок в vb.net и мне нужно выполнить задание - разработать рабочий интерфейс для автоматизации информационной области.Данные берутся из .txt
0
1976 / 1410 / 365
Регистрация: 26.06.2017
Сообщений: 4,009
21.03.2022, 14:58 10
Цитата Сообщение от Quapches111 Посмотреть сообщение
сохраняю и в текстовом файле, где города, везде должна стоять Москва.
Сохранить нужно только записи с выбранным городом?
0
0 / 0 / 0
Регистрация: 21.10.2021
Сообщений: 19
21.03.2022, 15:02  [ТС] 11
все записи
0
1976 / 1410 / 365
Регистрация: 26.06.2017
Сообщений: 4,009
21.03.2022, 15:15 12
Лучший ответ Сообщение было отмечено Quapches111 как решение

Решение

Цитата Сообщение от Quapches111 Посмотреть сообщение
как-то добавить кнопку SAVE
Добавляем в класс формы методы:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    Private Sub SaveButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveButton.Click
        Dim fName As String = IO.Path.Combine(Application.StartupPath, "tst1.txt")
        Dim records() As String = GetAllBioAsString(BindingSource1.List)
        IO.File.WriteAllLines(fName, records, System.Text.Encoding.Default)
    End Sub
 
    Private Function GetAllBioAsString(ByVal source As IEnumerable(Of Biography)) As String()
        Dim result As String() = {}
        Dim i As Integer
 
        For Each bio As Biography In source
            ReDim Preserve result(i)
            result(i) = bio.ToString
            i += 1
        Next
 
        Return result
    End Function
Для их работы добавляем функцию в класс Biography:
VB.NET
1
2
3
4
    Public Overrides Function ToString() As String
        Dim sep As String = ","
        Return ФИО & sep & ДеньДР & sep & МесяцДР & sep & ГодДР & sep & Город & sep & Телефон & sep & Почта
    End Function
Цитата Сообщение от Quapches111 Посмотреть сообщение
все записи
Если так, то вместе
VB.NET
1
Dim records() As String = GetAllBioAsString(BindingSource1.List)
запишите
VB.NET
1
Dim records() As String = GetAllBioAsString(bb)
1
0 / 0 / 0
Регистрация: 21.10.2021
Сообщений: 19
21.03.2022, 15:24  [ТС] 13
Большое вам спасибо!)
0
0 / 0 / 0
Регистрация: 21.10.2021
Сообщений: 19
25.03.2022, 09:37  [ТС] 14
У меня возникла еще проблема. При скроллинге мерцают строки в datagridview. Слыхал, это из-за огромного кол-ва записей в этом случае помогает двойная буферизация.Но на форумах решения только на языке C#.Как исправить мерцание на vb.net ?
0
2615 / 2542 / 527
Регистрация: 17.02.2019
Сообщений: 4,251
25.03.2022, 18:07 15
Цитата Сообщение от Quapches111 Посмотреть сообщение
только на языке C#
А если код С# попробовать перевести Converter.telerik
0
4407 / 3531 / 843
Регистрация: 02.02.2013
Сообщений: 3,417
Записей в блоге: 2
26.03.2022, 13:00 16
Цитата Сообщение от Quapches111 Посмотреть сообщение
Как исправить мерцание на vb.net ?
Попробуйте
VB.NET
1
2
3
4
5
6
7
8
Imports System.Reflection
'…
DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None
SetDoubleBuffered(DataGridView1)
'…
Public Sub SetDoubleBuffered(ByVal cntr As Control)
    GetType(Control).InvokeMember("DoubleBuffered", BindingFlags.SetProperty Or BindingFlags.Instance Or BindingFlags.NonPublic, Nothing, cntr, New Object() {True})
End Sub
Цитата Сообщение от Quapches111 Посмотреть сообщение
это из-за огромного кол-ва записей
При огромном количестве записей используют VirtualMode (https://docs.microsoft.com/ru-... work-4.7.2 ).
0
0 / 0 / 0
Регистрация: 21.10.2021
Сообщений: 19
13.04.2022, 11:17  [ТС] 17
а что можно как-то сделать, чтобы данные были там зашифрованы.т.е прога шифрует и сохраняет в txt кракозябрами, а по ключу расшифровывает и отображает в проге нормально ???
0
1976 / 1410 / 365
Регистрация: 26.06.2017
Сообщений: 4,009
13.04.2022, 12:01 18
Цитата Сообщение от Quapches111 Посмотреть сообщение
чтобы данные были там зашифрованы
Можно. По изучайте соответствующие темы на форуме, их достаточно много и решения в них разные. Вообще работая с персональными данными вы должны соблюдать Федеральный закон "О персональных данных" N 152-ФЗ, имейте это ввиду.
0
13.04.2022, 12:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.04.2022, 12:01
Помогаю со студенческими работами здесь

Как обращаться к локальным данным?
Как можно обратиться из void printsave к sum2, чтобы данные из принтов вывести в файл, не только...

Как правильно хранить и обращаться к данным сессии?
всем привет 1) допустим я имаею сервет. в нем некоторое задание атрибутов сессии ......

Как можно обращаться к ячейкам DataGridView кроме как из метода, где создается таблица?
В общем. Есть метод, создающий таблицу: public void CreateTable(int x, int y, int rows, int...

Добавить возможность изменять студентов
Необходимо добавить в программу возможность изменять студентов, интерфейс нужно оформить с помощью...

Добавить возможность изменять структуру
Есть структура, в которой нужно вводить ИМЯ и ФАМИЛИЮ, ТЕЛЕФОН и ДАТУ РОЖДЕНИЯ. Дальше нужно ввести...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru