Как закодировать кнопку для получения данных из таблицы в базе данных и отображения в виде таблицы данных? - PullRequest
0 голосов
/ 13 мая 2009

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

В представлении таблицы данных эти данные будут сохранены в другой таблице в той же базе данных.

Ранее я использовал список для отображения информации, но не смог сохранить ее в базе данных.

Это код, который я использовал для списка:

listbox.items.add
{while mydatareader.read
{add.("item_name")

Можно ли как-нибудь отобразить это в виде сетки данных, как я делал в списке?

Я использую столбец textboxcolumn view для таблицы данных.

Ответы [ 2 ]

2 голосов
/ 13 мая 2009

Я уверен, что есть много способов сделать это, но попробуйте это. Допустим, у вас есть база данных с таблицей с именем «TestSample», которая имеет три столбца с именами «Column1», «Column2», «Column3». Затем добавьте элемент управления ListView в форму и назовите его «ListDisplay» и, возможно, две кнопки для тестирования. Далее вам нужно создать столбцы, вы можете сделать это с помощью кода, подобного этому

Private Sub CreateColumns()
    'ListDisplay is the name of the ListView Control'
    ListDisplay.View = View.Details
    ListDisplay.FullRowSelect = True

    'Create Columns'
    ListDisplay.Columns.Add("Column1", 200, HorizontalAlignment.Left)
    ListDisplay.Columns.Add("Column2", 200, HorizontalAlignment.Left)
    ListDisplay.Columns.Add("Column3", 200, HorizontalAlignment.Left)
End Sub

этот код можно вызвать из события «Загрузка формы», например

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    'Setup Colums'
    CreateColumns()
End Sub

Далее нужно собрать данные из базы данных и вставить обратно в базу данных. Эти две функции могут помочь

 Private Sub FillTable(ByVal connString As String, ByVal QueryString As String)
    'Clear Populated Items'
    ListDisplay.Items.Clear()

    'Setup Connection and query'
    Dim conn As SqlConnection = New SqlConnection(connString)
    Dim cmd As SqlCommand = New SqlCommand(QueryString, conn)
    Dim da As SqlDataAdapter = New SqlDataAdapter(cmd)

    'Setup Dataset'
    Dim ds As New DataSet

    'Populate Dataset'
    conn.Open()
    da.Fill(ds, "TestSample")
    conn.Close()

    'Free up memory'
    cmd.Dispose()
    conn.Dispose()

    'Populate ListView Control'
    For Each dr As DataRow In ds.Tables("TestSample").Rows
        Dim items As New ListViewItem
        items.Text = dr.Item(0).ToString()
        items.SubItems.Add(dr.Item(1).ToString())
        items.SubItems.Add(dr.Item(2).ToString())

        ListDisplay.Items.Add(items)
    Next

End Sub

Private Sub InsertBack(ByVal connString As String, ByVal QueryString As String, ByVal ParameterOne As String, ByVal ParameterTwo As String, ByVal ParameterThree As String)
    'Setup Connection'
    Dim conn As SqlConnection = New SqlConnection(connString)
    Dim cmd As SqlCommand = New SqlCommand(QueryString, conn)

    'Setup Parameters'
    cmd.Parameters.Add("@Column1", SqlDbType.Text).Value = ParameterOne
    cmd.Parameters.Add("@Column2", SqlDbType.Text).Value = ParameterTwo
    cmd.Parameters.Add("@Column3", SqlDbType.Text).Value = ParameterThree

    'Process data: Insert to database'
    conn.Open()
    cmd.ExecuteNonQuery()
    conn.Close()

    'Free up memory'
    cmd.Dispose()
    conn.Dispose()

End Sub

используя кнопку "Click Event" в форме, которую вы можете вызвать, заполните ListView следующим образом

 'Get data from database and populate ListView: Parameter requires connection string'
    FillTable("Data Source=SERVER-PC;Initial Catalog=Database;Persist Security Info=True;User ID=UsernameIfRequired;Password=PasswordIfRequired", "SELECT * FROM TestSample")

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

  'Loop through all Items in the ListView and send to database'
    For Each item As ListViewItem In ListDisplay.Items
        'Add data to the database from ListView Items: Parameter requres connection string and the 3 input items (could be as many as you want)'
        InsertBack("Data Source=SERVER-PC;Initial Catalog=Database;Persist Security Info=True;User ID=UsernameIfRequired;Password=PasswordIfRequired", "INSERT INTO TestSample (Column1,Column2,Column3) values (@Column1,@Column2,@Column3)", item.Text, item.SubItems(1).Text, item.SubItems(2).Text)

        'Add data to the database from ListView Items: Parameter requres connection string and the 3 input items (could be as many as you want)'
        InsertBack("Data Source=SERVER-PC;Initial Catalog=Database;Persist Security Info=True;User ID=UsernameIfRequired;Password=PasswordIfRequired", "INSERT INTO AnotherSample (Column1,Column2,Column3) values (@Column1,@Column2,@Column3)", item.Text, item.SubItems(1).Text, item.SubItems(2).Text)
    Next

Как видите, данные можно отправлять в две разные таблицы.

0 голосов
/ 13 мая 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...