【问题标题】:For Each DataTable Add UserControl to FlowLayoutPanel为每个 DataTable 添加 UserControl 到 FlowLayoutPanel
【发布时间】:2012-09-25 19:30:21
【问题描述】:

我创建了一个包含图片和两个标签的 UserControl: 标签名 标签用户名

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

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

有人可以帮帮我吗?

【问题讨论】:

    标签: c# user-controls datatable dataset flowlayoutpanel


    【解决方案1】:

    您可以在 Form 和 UserControl 中对此进行编码。

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

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

    在您的表单中循环遍历数据集中所有数据表中的所有数据行,并为每个数据行创建一个用户控件实例并将每个实例添加到您的 FlowLayoutPanel。在 DataRows 中使用适当的列值来设置 UserControl Label 值:

    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);
        }
    }
    

    【讨论】:

    • 您是否知道为什么我实现的 .MouseClick 似乎只在我选择 UserControl 上的空白而不是 UserControl 中的标签或图像时才起作用?
    • 很高兴它有效。我敢打赌,您会看到您描述的鼠标单击行为,因为 MouseClick 事件仅针对 UserControl 而不是其子控件注册。一种解决方案是在您的子控件中注册 UC 的 MouseClick 事件处理程序。这在设计器中很容易做到:选择一个子控件,在属性窗口中查看其事件,然后在其 MouseClick 事件下拉列表中选择您已经为 UC 创建的事件。
    • 如果我在表单中创建了事件,我在用户控件中看不到它。对吗?
    • @hshad 在这种情况下,您将在 UC 中创建一个事件,该事件会在您的 UC 的任何部分引发 MouseClicked 事件时触发。你仍然会像我在之前的评论中描述的那样在你的 UC 中创建 MouseClicked 事件处理程序,并且在 MouseClicked 中你会触发你的 UC 事件。现在,当您在表单中创建 UC 的实例时,使用如下代码订阅您的 UC 的自定义事件:uc.MyUCMouseClick += UC_MyClickEvent; 如果我在这里没有说清楚,我可以用更多代码更新我的答案。
    • 如果您能对这个问题发表评论,那就太好了:stackoverflow.com/questions/12608300/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多