0

好的,所以我创建了一个新项目,允许用户相互发送消息。我已经差不多完成了,只是需要清理一些东西。

我已成功允许用户发送消息(通过 mysql)。现在我在我应该检索消息并将其显示在表单中的部分;这就是我卡住的地方。如果用户在数据库中只有 1 条消息,这很容易做到,但如果他有超过 1 条呢?我将如何检索它们并在表单中显示它们。我使用这个查询:

SELECT ToID
FROM Message
WHERE (ID LIKE @ID)

它的作用是检查数据库中包含收件人作为用户 ID 的任何消息。如果数据库确实包含任何消息,那么程序将在文本框中显示它们。但是如果超过 1 条消息,数据库将如何在表单中显示它们?该表单具有以下文本框:

  1. 发件人
  2. 主题
  3. 日期。

这是我希望用于检索消息的查询:

SELECT ID, Title, Body, Date, FromUsername
FROM Message
WHERE (ID LIKE @ID)

请帮忙?任何其他解决方案都可以,只要它易于理解(我是 vb 新手)。

4

1 回答 1

0

如果我理解正确,为什么不使用列表框而不是文本框来显示消息。这样,有多少消息并不重要,它们只会不断添加到列表框中。

就像是:

For Each s as String in messageList
listbox1.items.add(s)

Next

编辑:

检索数据,然后将其绑定到列表框——我从来没有真正使用过 mysql,所以我从谷歌搜索中提取了代码——它应该能让你开始。

dim table as new DataTable("table1")

' Create a Connection
using conn as new MysqlConnection("...connectionstring")
    conn.Open() ' Open it

    ' Create a new Command Object
    using cmd as new MysqlCommand("SELECT ID, Title, Body, Date, FromUsername FROM Message WHERE (ID LIKE @ID)", conn)

        ' Create a DataAdapter
        ' A DataAdapter can fill a DataSet or DataTable
        ' and if you use it with a CommandBuilder it also
        ' can persist the changes back to the DB with da.Update(...)
        using da as new MysqlDataAdapter(cmd)
            da.Fill(table) ' Fill the table
        end using

    end using
end using

' A Binding Source allows record navigation
dim bs as new BindingSource(table, nothing)

' You can bind virtually every property (most common are "text" "checked" or "visible"
' of a windows.forms control to a DataSource
' like a DataTable or even plain objects



ListBox1.DisplayMember = "Message"
ListBox1.ValueMember = "ID"
ListBox1.DataSource = table2
于 2013-04-11T17:31:49.230 回答