2012-09-25 40 views
0

我创建具有图像和两个标签一个用户控件: 标签 labelUsername对于每个DataTable添加用户控件到FlowLayoutPanel中

我还创建了一个DataSet和DataTable从一个SQL CE数据库中获取数据。这一点工作正常,因为我设法遍历所有DataTable行并在MessageBox中显示信息。

现在我想在DataTable中的所有行的FlowLayoutPanel中显示UserControl,并使用DataTable中的名称和用户名值填充两个标签。这是我被卡住的地方,因为我不知道在UserControl中编码什么和在包含FlowLayoutPanel的表单中编码什么。

有人可以帮我吗?

回答

1

你可以在Form和你的UserControl中编码。

在您的UserControl中,公开属性或方法中每个标签的Text属性。如果你选择一个属性,它可能看起来像这样为您的标签labelUsername:

public string Username { 
    set { labelUsername.Text = value; } 
} 

在表单中遍历数据集中的和每个所有的数据表的所有数据行数据行创建用户控件的实例,并添加每个到你的FlowLayoutPanel。使用DataRows中的相应列值来设置UserControl标签值:

foreach (DataTable dt in ds.Tables) { 
    foreach (DataRow row in dt.Rows) { 
     var uc = new YourUserControl { Username = row["usernameColumn"].ToString(), 
             Name = row["nameColumn"].ToString() }; 
     flowLayoutPanel1.Controls.Add(uc); 
    } 
} 
+0

这非常有效。谢谢。 – hshah

+0

您是否碰巧知道为什么我实现的.MouseClick似乎只能在UserControl上选择空白而不是UserControl中的标签或图像时起作用? – hshah

+0

很好用。我敢打赌,你看到了你描述的鼠标点击行为,因为MouseClick事件只是为UserControl而不是其子控件注册的。一种解决方案是在您的子控件中注册UC的MouseClick事件处理函数。这对于设计师来说很简单:选择一个子控件,在属性窗口中查看它的事件,并在其MouseClick事件下拉菜单中选择已经为UC创建的事件。 –