Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/35: Рейтинг темы: голосов - 35, средняя оценка - 4.63
2 / 2 / 0
Регистрация: 18.12.2018
Сообщений: 392

Переписать процедуру с DatagridView в Datagrid

15.07.2019, 12:44. Показов 7517. Ответов 38

Студворк — интернет-сервис помощи студентам
Всем привет!
Есть процедура, работающая С Datagridveiw
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
    Private Sub Add_IP(ByVal values As List(Of String))
 
        If Me.DataGridView1.InvokeRequired Then
            Dim d As New SetDatapointCallback(AddressOf Add_IP)
            Me.Invoke(d, New Object() {values})
        Else
            Dim editrow As Boolean = False
            For Each row As DataGridViewRow In DataGridView1.Rows
                If row.Cells(0).Value.ToString() = values(0) Then
                    For i As Integer = 1 To values.Count - 1
                        If values(i) <> "-" Then
                            row.Cells(i).Value = values(i)
                        End If
                        If i = 3 AndAlso values(3) = "Available" Then
                            row.Cells(i).Style.BackColor = Color.LightGreen
                        End If
                        If i = 4 AndAlso values(4) = "Available" Then
                            row.Cells(i).Style.BackColor = Color.LightGreen
                        End If
                        If i = 5 AndAlso values(5) = "HTTPS Available" Then
                            row.Cells(i).Style.BackColor = Color.LightGreen
                        End If
                        If i = 5 AndAlso values(5) = "Available" Then
                            row.Cells(i).Style.BackColor = Color.Yellow
                        End If
                    Next i
                    editrow = True
                End If
            Next row
 
            If Not editrow Then
                Try
                    DataGridView1.Rows.Add(values(0), values(1), values(2), values(3), values(4), values(5))
                Catch ex As Exception
                    Exit Sub
                End Try
            End If
        End If
    End Sub
Как можно преобразовать и запустить эту процедуру с другим элементом управления - обычным DataGeid (предшественником Datagridview)?

Заранее спасибо за помощь!
Миниатюры
Переписать процедуру с DatagridView в Datagrid  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.07.2019, 12:44
Ответы с готовыми решениями:

Вывод в Datagrid и DataGridView
Здравствуйте! Я только недавно начал изучать C#, сейчас интересует работа с БД (через ODBC), как соединится с бд и вывести из неё нужные...

WindowsForms. DataGrid и DataGridView
В плохом и уставшем настроении сразу после болезни бросился я читать мануалы по этим штукам. И... Ничего не понял. Прошу у вас пример...

Переписать процедуру в transact
CREATE PROCEDURE ChildDeptsList (pDeptID integer) RETURNS (rDeptFullName varchar(100)) AS BEGIN FOR SELECT DeptFullName FROM DEPS ...

38
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
25.07.2019, 14:47
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от _Alf_ Посмотреть сообщение
как удалить вложенную таблицу и создать ее заново?
Не понял зачем удалять чтобы заново создать. В чем смысл этой операции?
М.б. вы хотите наполнить ее новым содержанием. В данном случае содержимое таблицы определяется соответствующим txt-файлом.
VB.NET
1
2
3
4
5
6
7
'до определения MasterControl
'удаляем таблицу Wor из коллекции ds.Tables
ds.Tables.Remove("Wor")
'формируем таблицу из txt-файла
LoadToTable("workers.txt", dtD)
'добавляем новую таблицу в коллекцию
ds.Tables.Add(dtD)
Можно добавить еще одну (несколько) таблицу Detail к уже имеющейся
VB.NET
1
2
3
ds.Tables.Add(dtD2)
'...
md.childView.Add("Wor2", "Сотрудники2")
1
2 / 2 / 0
Регистрация: 18.12.2018
Сообщений: 392
25.07.2019, 15:01  [ТС]
ovva, ну а все-таки? можно как то удалить и создать заново?
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
25.07.2019, 15:13
_Alf_, я же написал как удалить таблицу, сформировать новую таблицу и добавить ее в коллекцию. Если можно расшифруйте что вы понимаете под "создать заново".
0
2 / 2 / 0
Регистрация: 18.12.2018
Сообщений: 392
29.07.2019, 11:49  [ТС]
ovva, Возможно я не правильно объясняюсь..
Попробую более подробно. Смортите..
При клике на на стрелочку по определенной записи открывается вложенная таблица. Так вот. мне необходимо что бы при клике на другую запись вложенная таблица отчищалась полностью и данные подтягивались заново. у меня получается вот так: (см скрин)
Миниатюры
Переписать процедуру с DatagridView в Datagrid  
Изображения
 
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
29.07.2019, 11:57
Цитата Сообщение от _Alf_ Посмотреть сообщение
у меня получается вот та
Выложите ваш проект.
0
2 / 2 / 0
Регистрация: 18.12.2018
Сообщений: 392
29.07.2019, 12:34  [ТС]
ovva,
Вложения
Тип файла: 7z WindowsApp54.7z (150.3 Кб, 1 просмотров)
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
29.07.2019, 14:17
Немного подправил (насколько понял вашу идею).
Вложения
Тип файла: rar WindowsApp54.rar (21.7 Кб, 7 просмотров)
0
2 / 2 / 0
Регистрация: 18.12.2018
Сообщений: 392
29.07.2019, 14:49  [ТС]
ovva, не совсем так.
мне надо что бы при клике на запись в dgvMasDet моделировалась уже новая таблица с данными из labelов...
у меня сделано это, только каждый раз при клике создавались новые (как в посте : https://www.cyberforum.ru/post13737966.html) см. скрин
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
29.07.2019, 17:08
Цитата Сообщение от _Alf_ Посмотреть сообщение
что бы при клике на запись в dgvMasDet моделировалась уже новая таблица с данными из labelов
Этого я не понимаю. Сделать это можно, но при этом использование конструкции Master-Detail теряет всякий смысл.
0
2 / 2 / 0
Регистрация: 18.12.2018
Сообщений: 392
29.07.2019, 17:25  [ТС]
Цитата Сообщение от ovva Посмотреть сообщение
Этого я не понимаю. Сделать это можно, но при этом использование конструкции Master-Detail теряет всякий смысл.
А все таки?, как это можно сделать? Заранее спасибо.
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
29.07.2019, 17:44
Лучший ответ Сообщение было отмечено _Alf_ как решение

Решение

Цитата Сообщение от _Alf_ Посмотреть сообщение
А все таки?, как это можно сделать?
Кликните здесь для просмотра всего текста
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
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    dtM = New DataTable("Dep")
    dtM.Columns.Add("IdDep", System.Type.GetType("System.Int32"))
    dtM.Columns.Add("Наименование", System.Type.GetType("System.String"))
    dtM.Columns.Add("Комментарий", System.Type.GetType("System.String"))
    dtM.Rows.Add("1", "ЗаписьСтроки1", "ЗаписьСтроки1-2")
    dtM.Rows.Add("2", "ЗаписьСтроки2", "ЗаписьСтроки2-2")
    dtM.Rows.Add("3", "ЗаписьСтроки3", "ЗаписьСтроки3-2")
    DataGridView1.DataSource = dtM
    ds = New DataSet
    ds.Tables.Add(dtM.Copy)
    Panel1.Controls.Clear()
    md = Nothing
    Refresh()
    md = New MasterControl(ds, 1)
    Panel1.Controls.Add(md)
    md.setParentSource("Dep", "IdDep")
    AddHandler md.CellClick, AddressOf CellContent_Click
End Sub
Private Sub CellContent_Click(sender As Object, e As DataGridViewCellEventArgs)
    If md.Rows(e.RowIndex).Cells(0).Value Is Nothing Then Return
    If md.childView.TabPages.Count > 0 Then md.childView.TabPages.RemoveAt(0)
    If ds.Tables.Count > 1 Then ds.Tables.RemoveAt(1)
    Dim rn As New Random
    dtD = New DataTable("Wor")
    dtD.Columns.Add("IdDep", System.Type.GetType("System.Int32"))
    dtD.Columns.Add("ФамилияИО", System.Type.GetType("System.String"))
    dtD.Columns.Add("Адрес", System.Type.GetType("System.String"))
    dtD.Columns.Add("РабТелефон", System.Type.GetType("System.String"))
    Label1.Text = (md.Rows(e.RowIndex).Cells(0).Value).ToString
    Label2.Text = (rn.Next(1, 11)).ToString
    Label3.Text = (rn.Next(10, 101)).ToString
    Label4.Text = (rn.Next(100, 1001)).ToString
    dtD.Rows.Add(CInt(Label1.Text), Label2.Text, Label3.Text, Label4.Text)
    DataGridView2.DataSource = dtD
    ds.Tables.Add(dtD.Copy)
    md.childView.Add("Wor", "Сотрудники")
End Sub
1
2 / 2 / 0
Регистрация: 18.12.2018
Сообщений: 392
29.07.2019, 19:39  [ТС]
ovva, а можно данные грузить напрямую, без использования datagridview?
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
29.07.2019, 20:02
Цитата Сообщение от _Alf_ Посмотреть сообщение
можно данные грузить напрямую, без использования datagridview?
Сетки здесь имеют вспомогательное (иллюстративное) назначение. Если не нужно, то закомментируйте в коде все строки с DataGridView.
1
2 / 2 / 0
Регистрация: 18.12.2018
Сообщений: 392
30.07.2019, 14:37  [ТС]
ovva, а как можно добавить еще одну дочернюю таблицу?
Цитата Сообщение от ovva Посмотреть сообщение
Private Sub CellContent_Click(sender As Object, e As DataGridViewCellEventArgs)
* * If md.Rows(e.RowIndex).Cells(0).Value Is Nothing Then Return
* * If md.childView.TabPages.Count > 0 Then md.childView.TabPages.RemoveAt(0)
* * If ds.Tables.Count > 1 Then ds.Tables.RemoveAt(1)
* * Dim rn As New Random
* * dtD = New DataTable("Wor")
* * dtD.Columns.Add("IdDep", System.Type.GetType("System.Int32"))
* * dtD.Columns.Add("ФамилияИО", System.Type.GetType("System.String"))
* * dtD.Columns.Add("Адрес", System.Type.GetType("System.String"))
* * dtD.Columns.Add("РабТелефон", System.Type.GetType("System.String"))
* * Label1.Text = (md.Rows(e.RowIndex).Cells(0).Value).ToS tring
* * Label2.Text = (rn.Next(1, 11)).ToString
* * Label3.Text = (rn.Next(10, 101)).ToString
* * Label4.Text = (rn.Next(100, 1001)).ToString
* * dtD.Rows.Add(CInt(Label1.Text), Label2.Text, Label3.Text, Label4.Text)
* * DataGridView2.DataSource = dtD
* * ds.Tables.Add(dtD.Copy)
* * md.childView.Add("Wor", "Сотрудники")
End Sub
Добавлено через 19 минут
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
 Private dtM, dtD, dtD1 As DataTable
...
  Private Sub CellContent_Click(sender As Object, e As DataGridViewCellEventArgs)
 
        If md.Rows(e.RowIndex).Cells(6).Value Is Nothing Then Return
        If md.childView.TabPages.Count > 0 Then md.childView.TabPages.RemoveAt(0)
        If ds.Tables.Count > 2 Then ds.Tables.RemoveAt(2)
 
        dtD = New DataTable("Wor")
        dtD.Columns.Add("Id", System.Type.GetType("System.String"))
        dtD.Columns.Add("Фамилия", System.Type.GetType("System.String"))
        dtD.Columns.Add("Имя", System.Type.GetType("System.String"))
        dtD.Columns.Add("Отчество", System.Type.GetType("System.String"))
       
 
        dtD1 = New DataTable("Wor1")
        dtD1.Columns.Add("Id", System.Type.GetType("System.String"))
        dtD1.Columns.Add("Город", System.Type.GetType("System.String"))
        dtD1.Columns.Add("Улица", System.Type.GetType("System.String"))
        dtD1.Columns.Add("дом", System.Type.GetType("System.String"))
        dtD1.Columns.Add("Квартира", System.Type.GetType("System.String"))
 
        Label1.Text = (md.Rows(e.RowIndex).Cells(0).Value).ToString
        
        
        dtD.Rows.Add(Label1.Text, Label3.Text, Label4.Text, Label5.Text) 
        dtD1.Rows.Add(Label1.Text, Label6.Text, Label7.Text, Label8.Text, Label9.Text)
 
        ds.Tables.Add(dtD.Copy)
        ds.Tables.Add(dtD1.Copy)
        md.childView.Add("Wor", "Info 1") '
        md.childView.Add("Wor1", "Info2")
ошибка:
System.Data.DuplicateNameException: "DataTable с именем "Wor" уже принадлежит этому DataSet."

Что не так?:

Добавлено через 1 час 39 минут
Мне кажется, что ошибка в этом куске кода:
VB.NET
1
2
3
If md.Rows(e.RowIndex).Cells(6).Value Is Nothing Then Return
        If md.childView.TabPages.Count > 0 Then md.childView.TabPages.RemoveAt(0)
        If ds.Tables.Count > 1 Then ds.Tables.RemoveAt(1)
играюсь с ним
Либо такая ошибка:
System.Data.DuplicateNameException: "DataTable с именем "Wor1" уже принадлежит этому DataSet."
в обоих случаях подсвечивает вот эти строки
VB.NET
1
2
ds.Tables.Add(dtD.Copy)
        ds.Tables.Add(dtD1.Copy)
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
30.07.2019, 14:44
Попробуйте так
Кликните здесь для просмотра всего текста
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
Private Sub CellContent_Click(sender As Object, e As DataGridViewCellEventArgs)
    Label1.Text = (md.Rows(e.RowIndex).Cells(0).Value).ToString
    'Detail1
    rndLabel()
    Dim pgText As String = "List1"
    Dim dt1 As DataTable = AddDetail("Det1", {"F1", "A1", "T1"}, {"System.String", "System.String", "System.String"})
    If ds.Tables.Contains(dt1.TableName) Then ds.Tables.Remove(dt1.TableName)
    ds.Tables.Add(dt1)
    If md.childView.TabPages.ContainsKey(pgText) Then md.childView.TabPages.RemoveByKey(pgText)
    md.childView.Add(dt1.TableName, pgText)
    md.childView.TabPages(md.childView.TabPages.Count - 1).Name = pgText
    'Detail2
    rndLabel()
    pgText = "List2"
    Dim dt2 As DataTable = AddDetail("Det2", {"F2", "A2", "T2"}, {"System.String", "System.String", "System.String"})
    If ds.Tables.Contains(dt2.TableName) Then ds.Tables.Remove(dt2.TableName)
    ds.Tables.Add(dt2)
    If md.childView.TabPages.ContainsKey(pgText) Then md.childView.TabPages.RemoveByKey(pgText)
    md.childView.Add(dt2.TableName, pgText)
    md.childView.TabPages(md.childView.TabPages.Count - 1).Name = pgText
End Sub
Private Function AddDetail(ByVal tbName As String, ByVal colNames() As String, ByVal colTypes() As String) As DataTable
    Dim dt As DataTable
    dt = New DataTable(tbName)
    dt.Columns.Add("IdDep", System.Type.GetType("System.Int32"))
    For i = 0 To colNames.Length - 1 'здесь д.б. colNames.Length=4
        dt.Columns.Add(colNames(i), System.Type.GetType(colTypes(i)))
    Next
    dt.Rows.Add(CInt(Label1.Text), Label2.Text, Label3.Text, Label4.Text)
    Return dt
End Function
Private Sub rndLabel()
    Dim rn As New Random
    Label2.Text = (rn.Next(1, 11)).ToString
    Label3.Text = (rn.Next(10, 101)).ToString
    Label4.Text = (rn.Next(100, 1001)).ToString
End Sub
1
2 / 2 / 0
Регистрация: 18.12.2018
Сообщений: 392
30.07.2019, 15:23  [ТС]
ovva, вроде работает. по аналогии, как я понимаю можно и 3 и 4 таблицу добавить?
а как во вторую дочернюю таблицу запихнуть данные с других lablel?, label5, label6, label7?

Добавлено через 26 минут
вышел из ситуации:
добавив еще функцию
Private Function AddDetail1(ByVal tbName As String, ByVal colNames() As String, ByVal colTypes() As String) As DataTable
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
30.07.2019, 15:41
Цитата Сообщение от _Alf_ Посмотреть сообщение
по аналогии, как я понимаю можно и 3 и 4 таблицу добавить?
Да.
Цитата Сообщение от _Alf_ Посмотреть сообщение
как во вторую дочернюю таблицу запихнуть данные с других lablel?, label5, label6, label7?
Добавьте в параметры rndLabel список Labels
VB.NET
1
2
3
4
5
6
Private Sub rndLabel(ByVal Labels() As Label)
    Dim rn As New Random
    Labels(0).Text = (rn.Next(1, 11)).ToString
    Labels(1).Text = (rn.Next(10, 101)).ToString
    Labels(2).Text = (rn.Next(100, 1001)).ToString
End Sub
Тогда вызов процедуры будет выглядеть так
VB.NET
1
2
3
rndLabel({Label2, Label3, Label4})
'…
rndLabel({Label5, Label6, Label7})
Аналогично нужно внести изменения в процедуру AddDetail.
Цитата Сообщение от _Alf_ Посмотреть сообщение
добавив еще функцию
Это ни к чему.
0
2 / 2 / 0
Регистрация: 18.12.2018
Сообщений: 392
30.08.2019, 09:17  [ТС]
ovva, а возможно эту dll сделать доступной для использования под дотнет помладше (3.5 или 4.0)?
Миниатюры
Переписать процедуру с DatagridView в Datagrid  
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
30.08.2019, 14:07
_Alf_, попробуйте вариант (NET 4.0)
Вложения
Тип файла: rar dgvMasDet_4.rar (11.7 Кб, 8 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.08.2019, 14:07

Переписать процедуру в функцию
Не получается правильно переписать процедуру в функцию, помогите пожалуйста. var n:longint; procedure sh(n:longint); var...

Переписать процедуру на функцию
uses crt; var mas:array of real; i,j,x,y:integer; begin clrscr; write('Кол-во строк: '); readln(x); write('Кол-во столбцов: ');...

Заполнение datagridview или datagrid
Подскажите, пожалуйста, каким образом заполнять datagridview или datagrid, если данные в каждом столбце берутся из разной таблицы из бд ms...

Переписать под функцию процедуру
Хочу переписать под функцию процедуру: procedure podschet(a:mas;n,c:integer;var k:integer); var i:integer; begin k:=0; for i:=1...

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


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

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru