помогите с датагридом

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Ozzornik
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 01.09.2008 (Пн) 16:34

помогите с датагридом

Сообщение Ozzornik » 01.09.2008 (Пн) 17:02

Здравствуйте. У меня несколько проблем с датагридом. Элемент для меня сравнительно новый, но оказался очень необходимым. Перерыл весь MSDN по нему, но - то ли руки кривые, то ли знания не хватает, но ответа не нашел. Суть вопросов такая: есть DataGridView. Заполняется программно. В нем есть колонка чекбоксов, ссылок и колонка номер два - текстовая. По ней нужно программно осуществить сортировку в восходящем порядке.
По умолчанию сортировка происходит по нулевой колонке, но мне нужно чтобы при нажатии дополнительной кнопки в форме происходила сортировка именно по этой колонке в восходящем порядке, аналогично нажатию на заголовочную кнопку этой колонки датагрида. Как это сделать - что писать в коде - вопрос первый, но не самый актуальный. Второй вопрос состоит в том, что я совершенно не смог найти того, как организовать связь ссылок в ячейках датагрида с внешними объектами. Вопрос состоит в том, как этот адрес, условно говоря, по нажатии кнопки с надписью "www.yandex.ru" на форме, то есть - что писать в обработчике клика кнопки, чтобы прописать в ячейку датагрида ссылку так, чтобы при нажатии на ссылку уже в ячейке "www.yandex.ru", программа открыла броузер и загрузила туда страничку "www.yandex.ru" с прописанного на кнопке адреса? И третий вопрос: как узнать состояние чекбоксов в датагриде? в первой колонке стоит чекбокс. как узнать его состояние, допустим через обычный msgBox()? Что писать между скобками?
Буду исключительно признателен всем, кто ответит. Вопросы очень актуальны. Помогите пожалуйста.

Ozzornik
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 01.09.2008 (Пн) 16:34

Re: помогите с датагридом

Сообщение Ozzornik » 10.09.2008 (Ср) 9:00

первые две задачи решил через отслеживание текущей ячейки при нажатии на датагрид, а вот как организовать сортировку по колонке таблицы - не знаю. Как организовать программное нажатие заголовочной кнопки сортировки столбца в ms datagridview в VS2008? Кто-нибудь! Киньте примерчик.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Re: помогите с датагридом

Сообщение Sebas » 10.09.2008 (Ср) 9:50

оформатируй пост - нечитабелен. Я, например, этут тучу букв даже не читал(.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: помогите с датагридом

Сообщение Joo » 15.09.2008 (Пн) 18:33

Sebas писал(а):оформатируй пост - нечитабелен. Я, например, этут тучу букв даже не читал(.

Какие все гордые лижь бы придраться. Нормально чел отписал что хочет.

В общем вот все что тебе нужно. по твоим вопросам:
Код: Выделить всё
Imports System.Runtime.InteropServices

Module API
    <DllImport("shell32.dll", CharSet:=CharSet.Unicode)> _
    Public Function ShellExecute(ByVal hWnd As Integer, ByVal Operation As String, ByVal FileName As String, ByVal Parameters As String, ByVal Directory As String, ByVal ShowCmd As Integer) As Integer
    End Function
End Module

Public Class FormTest
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Програмное заполнение
        dgView.Rows.Add(False, "http://www.yandex.ru", "Хороший поисковик")
        dgView.Rows.Add(False, "http://www.google.ru", "Поисковик еще лучше")
        dgView.Rows.Add(False, "http://www.msdn.com", "MSDN - Лучший помошник, программисту")
        dgView.Rows.Add(False, "http://www.vbstreets.ru", "Хороший сайт, посвященный Visual Basic")
        'Програмная сортировка
        dgView.Sort(dgView.Columns(2), System.ComponentModel.ListSortDirection.Ascending)
    End Sub

    Private Sub dgView_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgView.CellContentClick
        Select Case e.ColumnIndex
            Case 0 'Клик по чекбоксу
                dgView.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = Not dgView.Rows(e.RowIndex).Cells(e.ColumnIndex).Value
            Case 1 'Клик по ссылке
                ShellExecute(Me.Handle, "Open", dgView.Rows(e.RowIndex).Cells(e.ColumnIndex).Value, vbNullString, vbNullString, 0)
            Case 2
                '
        End Select
    End Sub

    Private Sub btnEnumCheckBoxes_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnumCheckBoxes.Click
        'Получение состояний чекбоксов
        Dim i As Integer = 0
        For i = 0 To dgView.Rows.Count - 1
            MsgBox("Состояние чекбокса строки " & i & " " & dgView.Rows(i).Cells(0).Value.ToString)
        Next
    End Sub
End Class
Вложения
DATA_GRID_TEST_VS2008_SOURCE.RAR
Пример к посту
(40.95 Кб) Скачиваний: 72
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

Ozzornik
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 01.09.2008 (Пн) 16:34

Re: помогите с датагридом

Сообщение Ozzornik » 16.10.2008 (Чт) 14:06

Спасибо большое - это как раз то, что нужно! Все теперь работает! У меня в колонке для сортировки индекс цвета стоит и он скрыт из отображения - вот и нужна сортировка из кода, без всяких нажатий. Это очень актуальный вопрос был, как и чекбоксы - по ним выбирались строки для печати отчета.

Я применил сортировку из кода вот так:
Код: Выделить всё
Table1.Sort(Table1.Columns(1), System.ComponentModel.ListSortDirection.Descending)

где: Table1 - датагрид сам и есть.

А проверку чекбоксов организовал вот так:
Код: Выделить всё
Private Sub Table1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles Table1.CellClick
        Dim bttn As Integer = Val(Table1.CurrentCell.ColumnIndex)
       If bttn = 17 Then
            Try
                System.Diagnostics.Process.Start(SETTINGS_INI(0) & "PIC\" & Table1.Rows(Table1.CurrentCell.RowIndex).Cells(3).Value)
            Catch ex As Exception
                MsgBox("Ошибка открытия папки изображений на сервере. Указанная папка недоступна или недоступен сервер.")
            End Try
        End If

и так далее.. идея в том, что надо в таблице разные поля нажимать и разные действия перехватывать. Вот и сделал функцию обработки клика в поле самого датагрида которая перехватывает текущую ячейку и по ее координатам читает значение в ячейке с передачей их куда-либо. При этом получилась полная независимость от того, какого типа ячейка - кнопка ли или ссылка или просо текст. Может и несколько тяжеловатый код вышел, но работает.
Проверку чекбоксов организовал полным перебором колонки датагрида:
Код: Выделить всё
  If Table1.RowCount < 1 Then
            MsgBox("Нет данных для печати.")
        Else
            For counter = 0 To Table1.RowCount - 1
                If Table1.Rows(counter).Cells(2).Value = True Then
                    xml.Append("<TR><TD>" & Table1.Rows(counter).Cells(4).Value & "</TD>")
                    xml.Append("<TD>" & Table1.Rows(counter).Cells(5).Value & "</TD>")
                    xml.Append("<TD>" & Table1.Rows(counter).Cells(6).Value & "</TD>")
                    xml.Append("<TD>" & Table1.Rows(counter).Cells(7).Value & "</TD>")
                    xml.Append("<TD>" & Table1.Rows(counter).Cells(9).Value & "</TD>")
                    xml.Append("<TD>" & Table1.Rows(counter).Cells(10).Value & "</TD>")
                    xml.Append("<TD>" & Table1.Rows(counter).Cells(11).Value & "</TD>")
                    xml.Append("<TD>" & Table1.Rows(counter).Cells(13).Value & "</TD>")
                    xml.Append("<TD>" & Table1.Rows(counter).Cells(14).Value & "</TD>")
                    xml.Append("<TD>" & Table1.Rows(counter).Cells(15).Value & "</TD>")
                    xml.Append("<TD>" & Table1.Rows(counter).Cells(18).Value & "</TD></TR>")
                End If
            Next
        End If

А открытие странички в броузере сделал так:
Код: Выделить всё
System.Diagnostics.Process.Start(SETTINGS_INI(0) & "PIC\" & Table1.Rows(Table1.CurrentCell.RowIndex).Cells(3).Value)
           

Может у кого-то возникнут проблемы в приведенных мною вопросах, так что код выложил для поколений грядущих. Для размышления...


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

    TopList