VB.NET将数据从mysql查询传递到UserControl

VB.NET将数据从mysql查询传递到UserControl,mysql,vb.net,Mysql,Vb.net,我试图在flowlayoutpanel中显示mysql数据库中的一些数据。我已经创建了一个UserControl,其中包含我需要的3个不同标签:标题、消息和时间。我想将这3个信息从mysql查询传递到UserControl,然后为数据库中的每个条目创建一个单独的UserControl,并将其输出到FlowLAyoutPanel中 我的用户控制代码: 公共类聊天控件 公共标题作为字符串 公共消息作为字符串 公共时间作为字符串 公共财产所有权作为字符串 得到 返回标题 结束 设置(ByVal值作为字

我试图在flowlayoutpanel中显示mysql数据库中的一些数据。我已经创建了一个UserControl,其中包含我需要的3个不同标签:标题、消息和时间。我想将这3个信息从mysql查询传递到UserControl,然后为数据库中的每个条目创建一个单独的UserControl,并将其输出到FlowLAyoutPanel中

我的用户控制代码:

公共类聊天控件
公共标题作为字符串
公共消息作为字符串
公共时间作为字符串
公共财产所有权作为字符串
得到
返回标题
结束
设置(ByVal值作为字符串)
_标题=价值
端集
端属性
作为字符串的公共属性消息
得到
返回消息
结束
设置(ByVal值作为字符串)
_消息=值
端集
端属性
作为字符串的公共属性时间
得到
返回时间
结束
设置(ByVal值作为字符串)
_时间=价值
端集
端属性
末级
这是我的表格代码:

Private Sub-ChromeButton2\u Click(发送者作为对象,e作为事件参数)处理ChromeButton2。单击
Dim SDA作为新的MySqlDataAdapter
Dim dbDataSet作为新的Data.DataTable
将bSource设置为新BindingSource
Dim mysqlconn作为新的MySqlConnection(ConnectionString)
mysqlconn.Open()
Dim sqlcomand As String=“选择文本,
用户,
时间
来自呼叫中心.DB\u脚本\u聊天;”
command=newmysqlcommand(sqlcomand,mysqlconn)
SDA.SelectCommand=命令
SDA.Fill(数据库数据集)
bSource.DataSource=dbDataSet
SDA.Update(数据库数据集)
将每行作为dbDataSet.Rows中的DataRow
将myChat暗显为新的ChatControl()
myChat.Title=row.Item(“用户”).ToString
myChat.Message=row.Item(“文本”).ToString
myChat.Time=行(“时间”).ToString
如果FlowLayoutPanelChat.Controls.Count<0,则
FlowLayoutPanelChat.Controls.Clear()
其他的
FlowLayoutPanelChat.Controls.Add(myChat)
如果结束
下一个
端接头
因此FlowLayoutPanel显示了3个入口(因为我的测试数据库中只有3行数据),但是单元格中的数据没有填入标题、消息和时间。 它始终显示我在UserControl中设置的defoult值


请帮忙。Thx

首先,此代码错误:

将每行作为dbDataSet.Rows中的DataRow进行

将myChat暗显为新的ChatControl()
myChat.Title=row.Item(“用户”).ToString
myChat.Message=row.Item(“文本”).ToString
myChat.Time=行(“时间”).ToString
如果FlowLayoutPanelChat.Controls.Count<0,则
FlowLayoutPanelChat.Controls.Clear()
其他的
FlowLayoutPanelChat.Controls.Add(myChat)
如果结束
下一个
面板中的控件数量如何少于零?我猜您实际上想要做的是首先清除任何现有控件,然后添加所有新控件。在这种情况下,对
Clear
的调用应该在循环之外。不需要
If
语句,因为如果没有控件,
Clear
将无效:

FlowLayoutPanelChat.Controls.Clear()
将每行作为dbDataSet.Rows中的DataRow
将myChat暗显为新的ChatControl()
myChat.Title=row.Item(“用户”).ToString
myChat.Message=row.Item(“文本”).ToString
myChat.Time=行(“时间”).ToString
FlowLayoutPanelChat.Controls.Add(myChat)
下一个
作为记录,该代码也可以简化很多:

FlowLayoutPanelChat.Controls.Clear()
将每行作为dbDataSet.Rows中的DataRow
FlowLayoutPanelChat.Controls.Add(带有{.Title=行(“用户”).ToString()的新ChatControl,
.Message=行(“文本”).ToString(),
.Time=行(“时间”).ToString()})
下一个
关于这个问题,请查看您的
ChatControl
类,并告诉我在该代码中哪里有对
标签的引用。如果没有代码,您如何期望您的
标签
显示您传入的文本?去掉这些字段,让属性直接传递到
标签的
文本
属性,例如

公共属性标题作为字符串
得到
返回titleLabel.Text
结束
设置
titleLabel.Text=值
端集
端属性
在循环开始(外部)之前,您是否尝试过移动“FlowLayoutPanelChat.Controls.Clear()”?那么循环中就不需要If/Else了。我猜,“FlowLayoutPanelChat.Controls.Clear()”从未被调用过?