Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
4 / 4 / 0
Регистрация: 17.01.2020
Сообщений: 199

Навигация по datagridview (данные с текстового файла)

30.01.2020, 19:45. Показов 3293. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго дня!
Еще созрел один вопросик. Активно начинаю изучать работу datagridview с текстовым файлом.
И вот в чем вопрос.
Есть текстовый файл вида:

Дата:|30.01.2020
Время:|09:00
Тип обращения:|По записи
ФИО:| Иванов Иван Александрович
-
Дата:|30.01.2020
Время:|09:30
Тип обращения:|По записи
ФИО:| Махмутов Ринат Альбертович
-
Дата:|30.01.2020
Время:|10:00
Тип обращения:|Очередь
ФИО:| Одинцова Вера Павловна
-
Дата:|30.01.2020
Время:|10:50
Тип обращения:|По записи
ФИО:| Иванов Иван Александрович

На форме Datagridview с 2 столбцами:
Данные1|Данные 2
и 5 кнопок: Загрузить данные, На первую запись, На последнюю запись, Вперед, Назад.

При нажатии на кнопку "Загрузить запись" - Происходит загрузка первого блока из текстового файла в Datagridview (блоки разделены - строчкой ниже):
(первый блок из текстового файла)
Дата:|30.01.2020
Время:|09:00
Тип обращения:|По записи
ФИО:| Иванов Иван Александрович

отображение в DataGridView:
Данные1|Данные2 -имя столбцов
Дата:|30.01.2020
Время:|09:00
Тип обращения:|По записи
ФИО:| Иванов Иван Александрович

при нажатии на кнопку вперед, в datagridview погружается второй блок из текстового файла:
Дата:|30.01.2020
Время:|09:30
Тип обращения:|По записи
ФИО:| Махмутов Ринат Альбертович

В DataGridiew:
Данные1|Данные2 -имя столбцов
Дата:|30.01.2020
Время:|09:30
Тип обращения:|По записи
ФИО:| Махмутов Ринат Альбертович

и так далее. При нажатии на кнопку на первую запись - загружается из текстового файла 1 блок. При нажатии на кнопку на последнюю запись - погружается последний блок из текстового файла в DataGridView.
Количество блоков в текстовом файле может быть разное.
В Label1 вывести общее количество блоков, в label2 вывести номер того блока который открыт в данный момент в datagridview.
В текстовое поле вывести ФИО активного блока.

Пожалуйста, подскажите, как это реализовать.?
Буду очень рад помощи! Спасибо большое. Желательно с кодом )
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.01.2020, 19:45
Ответы с готовыми решениями:

Как занести данные из текстового файла в DataGridView?
Добрый вечер! У меня возникла проблема с массивом. Делаю базу данных из анкет, затем по критериям нужно будет найти анкеты. Нужно достать...

Вывести в datagridview данные из текстового файла, находящегося в ресурсах проекта
Всем доброго дня. Есть текстовый файл в ресурсах проекта вида: Россия Латвия Литва Эстония Германия Польша Как считать с...

Описать структуру с полями, считать данные из текстового файла, вывести данные, подсчитать количество
Доброе утро. С C# я знаком весьма посредственно, однако появилась необходимость выполнить на нем следующее задание: Описать структуру с...

7
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
30.01.2020, 21:13
Лучший ответ Сообщение было отмечено KwaZZi как решение

Решение

Кликните здесь для просмотра всего текста
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
Public Class Form4
    Private data()() As String
    Private k As Integer
    Private Sub Form4_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        DataGridView1.ColumnCount = 2
        DataGridView1.Columns(0).HeaderText = "Data1"
        DataGridView1.Columns(1).HeaderText = "Data2"
        DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
        k = 0
        Label1.Text = k
        Label2.Text = 0
    End Sub
    Private Sub Load_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim tmp() As String = IO.File.ReadAllLines("data.txt", System.Text.Encoding.Default)
        ReDim data(tmp.Length / 5 - 1)
        Dim j, i As Integer
        ReDim data(j)(3)
        For Each s As String In tmp
            If s = "-" Then
                j += 1
                i = 0
                ReDim data(j)(3)
                Continue For
            End If
            data(j)(i) = s
            i += 1
        Next
        Label1.Text = data.Length
    End Sub
    Private Sub First_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        k = 0
        showBlock(k)
    End Sub
    Private Sub End_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
        k = data.Length - 1
        showBlock(k)
    End Sub
    Private Sub Forward_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
        k += 1
        If k = data.Length Then k = 0
        showBlock(k)
    End Sub
    Private Sub Backwards_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click
        k -= 1
        If k = -1 Then k = data.Length - 1
        showBlock(k)
    End Sub
    Private Sub showBlock(ByVal jj As Integer)
        DataGridView1.Rows.Clear()
        DataGridView1.RowCount = 4
        Dim ss() As String = data(jj)
        For i = 0 To ss.Length - 1
            Dim s() As String = Split(ss(i), "|")
            DataGridView1(0, i).Value = s(0)
            DataGridView1(1, i).Value = s(1)
        Next
        Label2.Text = jj + 1
    End Sub
End Class
Миниатюры
Навигация по datagridview (данные с текстового файла)  
2
Лень — мое второе и
 Аватар для Orlangur
3228 / 2416 / 687
Регистрация: 28.11.2014
Сообщений: 3,601
Записей в блоге: 3
30.01.2020, 21:17
Лучший ответ Сообщение было отмечено KwaZZi как решение

Решение

KwaZZi, ну, если набросать на коленке, то как-то так
VB.NET
1
2
Dim currentblock = 0
    Dim blocks() As String
VB.NET
1
2
3
4
5
6
7
8
  'считываем данные из файла и заполнение массива
        Dim source As String = IO.File.ReadAllText("C:\Users\administrator\Desktop\src.txt", System.Text.Encoding.Default)
        blocks = Split(source, "-" & Environment.NewLine)
        Label1.Text = "1"
        Label2.Text = blocks.Count
        If blocks.Count > 0 Then
            AddData(0)
        End If
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 Sub AddData(ByVal index As Integer) 'процедура добавления данных в dgv
        If index < 0 Or index > blocks.Count - 1 Then Exit Sub
        DataGridView2.Rows.Clear()
        TextBox1.Clear()
        currentblock = index
        Label1.Text = index + 1
        Dim fields() As String = Split(blocks(index), Environment.NewLine)
        For i = 0 To fields.Count - 1
            Dim data() As String = Split(fields(i), "|")
            If data(0) = "ФИО:" Then TextBox1.Text = data(1)
            If data.Count > 1 Then
                DataGridView2.Rows.Add(New String() {data(0), data(1)})
            End If
        Next
    End Sub
VB.NET
1
2
3
4
5
6
7
8
   'первая запись
        AddData(0)
 'последняя запись
        AddData(blocks.Count - 1)
 'вперед
        AddData(currentblock + 1)
 'назад
        AddData(currentblock - 1)
А вообще, стоит задуматься о структуризации данных, например, хранить эти данные в формате xml / json или в базе данных, по последнему можно посмотреть в FAQ
Готовые решения и полезные коды на Visual Basic .NET (Часть-1)
Готовые решения и полезные коды на Visual Basic .NET (Часть-1)
Готовые решения и полезные коды на Visual Basic .NET (Часть-1)
1
4 / 4 / 0
Регистрация: 17.01.2020
Сообщений: 199
31.01.2020, 09:15  [ТС]
Orlangur1991, Все работает, классно, спасибо!)
подскажите, пожалуйста такой еще момент.
Допустим добавили на форму еще комбобокс.
Как в него загрузить из текстового файла все ФИО. и при выборе ФИО отображать в datagridview тот блок, который соответствует данному фио. Допустим Выбрали ФИО: Одинцова Вера Павловна
и в dvg отобразили:
Данные|Данные2
Дата:|30.01.2020
Время:|10:00
Тип обращения:|Очередь
ФИО:| Одинцова Вера Павловна

Заранее спасибо)
0
Лень — мое второе и
 Аватар для Orlangur
3228 / 2416 / 687
Регистрация: 28.11.2014
Сообщений: 3,601
Записей в блоге: 3
31.01.2020, 15:44
KwaZZi,
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        'считываем данные из файла
        Dim source As String = IO.File.ReadAllText("C:\Users\administrator\Desktop\src.txt", System.Text.Encoding.Default)
        blocks = Split(source, "-" & Environment.NewLine)
        Label1.Text = "1"
        Label2.Text = blocks.Count
        For i = 0 To UBound(blocks)
            Dim fields() As String = Split(blocks(i), Environment.NewLine)
            ComboBox1.Items.Add(Split(fields(3), "|")(1))
            If ComboBox1.Items.Count > 0 Then ComboBox1.SelectedIndex = 0
        Next
    End Sub
VB.NET
1
2
3
 Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
        AddData(ComboBox1.SelectedIndex)
    End Sub
2
4 / 4 / 0
Регистрация: 17.01.2020
Сообщений: 199
02.02.2020, 12:55  [ТС]
Orlangur1991, спасибо большое за Вашу помощь.
Подскажите, пожалуйста, нашел такую штуку, называться BindingNavigator1.
Хочу через нее организовать навигацию по записям. но при запуске приложения она не доступна.
Вы случайно не пользовались этим контролом? Буду признателен, если расскажите, и по возможности покажите, как с ним обращаться. Еще раз большое спасибо.
0
4 / 4 / 0
Регистрация: 17.01.2020
Сообщений: 199
05.02.2020, 13:58  [ТС]
ovva, разбираю Ваш пример.
Подскажите, а если будет больше 4 строк в блоке?
Где размер блока изменить?

Допустим в файле размер блока в 6 строк.
при загрузке файла по кнопке сразу же вываливается на ошибку:
System.IndexOutOfRangeException: "Индекс находился вне границ массива."

Добавлено через 7 минут
и как при загрузке сразу же показать первую запись, а не нажимать кнопки для ее появления?
Спасибо
0
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
05.02.2020, 16:30
Лучший ответ Сообщение было отмечено KwaZZi как решение

Решение

Цитата Сообщение от KwaZZi Посмотреть сообщение
Подскажите, а если будет больше 4 строк в блоке?
Цитата Сообщение от KwaZZi Посмотреть сообщение
как при загрузке сразу же показать первую запись, а не нажимать кнопки для ее появления?
Полагал, что вы и сами вполне можете найти ответы на эти вопросы.
Кликните здесь для просмотра всего текста
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
Public Class Form4
    Private data()() As String
    Private k, blockLen As Integer
    Private Sub Form4_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        DataGridView1.ColumnCount = 2
        DataGridView1.Columns(0).HeaderText = "Data1"
        DataGridView1.Columns(1).HeaderText = "Data2"
        DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
        k = 0
        Label1.Text = k
        Label2.Text = 0
        blockLen = 6
        LoadData()
    End Sub
    Private Sub LoadData()
        Dim tmp() As String = IO.File.ReadAllLines("data2.txt", System.Text.Encoding.Default)
        ReDim data(tmp.Length / (blockLen + 1) - 1)
        Dim j, i As Integer
        ReDim data(j)(blockLen - 1)
        For Each s As String In tmp
            If s = "-" Then
                j += 1
                i = 0
                ReDim data(j)(blockLen - 1)
                Continue For
            End If
            data(j)(i) = s
            i += 1
        Next
        Label1.Text = data.Length
        showBlock(0)
    End Sub
    Private Sub First_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        k = 0
        showBlock(k)
    End Sub
    Private Sub End_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
        k = data.Length - 1
        showBlock(k)
    End Sub
    Private Sub Forward_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
        k += 1
        If k = data.Length Then k = 0
        showBlock(k)
    End Sub
    Private Sub Backwards_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click
        k -= 1
        If k = -1 Then k = data.Length - 1
        showBlock(k)
    End Sub
    Private Sub showBlock(ByVal jj As Integer)
        DataGridView1.Rows.Clear()
        DataGridView1.RowCount = blockLen
        Dim ss() As String = data(jj)
        For i = 0 To ss.Length - 1
            Dim s() As String = Split(ss(i), "|")
            DataGridView1(0, i).Value = s(0)
            DataGridView1(1, i).Value = s(1)
        Next
        Label2.Text = jj + 1
    End Sub
End Class

PS. Удалите кнопку Load и код к ней.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.02.2020, 16:30
Помогаю со студенческими работами здесь

Из текстового файла в dataGridView
У меня есть файл &quot;new.txt&quot;, в котором в строчку записаны числа например &quot;1234 5678&quot;. И есть dataGridView, состоящая из 2ух столбцов. В 1ом...

Как ввести/вывести данные из текстового документа в DataGridView и наоборот?
Собственно вопрос в заголовке. Перерыл много ссылок,везде C#,а нужно на С++, пробовал переделывать под С++, что-то не работает. Ввод и...

Перенос из текстового файла в DataGridview
Добрый день форумчанам. Помогите пожалуйста незадачливому студенту. =) Я пытаюсь сделать судоку, для которого я вытаскиваю этюд из...

Заполнение datagridview из текстового файла
Подскажите пожалуйста. как заполнить datagridview из текстового файла при нажатии кнопки?

Привязка данных текстового файла к DataGridView
В инете че-то порыскал , не че про это не нашел ...Как привязать данные текстового файла к гриде ?


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru