0

さて、ユーザーが互いにメッセージを送信できるようにする新しいプロジェクトを作成しました。ほぼ完成しましたが、いくつかクリアしなければならないことがあります。

ユーザーが(mysql経由で)メッセージを送信できるようにしました。これで、メッセージを取得してフォームに表示することになっている部分に着きました。これが私が立ち往生した場所です。ユーザーがデータベースにメッセージを 1 つしか持っていない場合は簡単ですが、複数のメッセージを持っている場合はどうなるでしょうか? それらをすべて取得してフォームに表示するにはどうすればよいですか。このクエリを使用しています:

SELECT ToID
FROM Message
WHERE (ID LIKE @ID)

これが行うことは、ユーザーの ID として受信者を含むメッセージがないかデータベースをチェックすることです。データベースに実際にメッセージが含まれている場合、プログラムはそれらをテキストボックスに表示します。しかし、複数のメッセージがある場合、データベースはそれらをフォームにどのように表示するのでしょうか? フォームには、次のテキスト ボックスがあります。

  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 を実際に扱ったことがないので、Google 検索からコードを持ち上げました - それはあなたが始めるはずです.

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 に答える