0

有效的 XHTML. 黑盒子是一个用户控件。

用户控制代码

 string b = "";
    public string ID
    {
        set { b = value; }
    }

    public void sample()
    {
        textBox1.Clear();
        using (SqlConnection myDatabaseConnection = new SqlConnection(myConnectionString.ConnectionString))
        {
            myDatabaseConnection.Open();
            using (SqlCommand SqlCommand = new SqlCommand("Select LastName, Image from Employee where ID = @a", myDatabaseConnection))
            {
                SqlCommand.Parameters.AddWithValue("@a", b);
                DataSet DS = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter(SqlCommand);
                da.Fill(DS, "Images");
                var imagesTable = DS.Tables["Images"];
                var imagesRows = imagesTable.Rows;
                var count = imagesRows.Count;

                if (count <= 0)
                    return;
                var imageColumnValue =
                    imagesRows[count - 1]["Image"];
                if (imageColumnValue == DBNull.Value)
                    return;

                var data = (Byte[])imageColumnValue;
                using (var stream = new MemoryStream(data))
                {
                    pictureBox1.Image = Image.FromStream(stream);
                }

            }
        }   
    }

    public void getname()
    {
        using (SqlConnection myDatabaseConnection = new SqlConnection(myConnectionString.ConnectionString))
        {
            myDatabaseConnection.Open();
            using (SqlCommand SqlCommand = new SqlCommand("Select LastName from Employee where ID =  @a", myDatabaseConnection))
            using (SqlDataAdapter da = new SqlDataAdapter(SqlCommand))
            {
                SqlCommand.Parameters.AddWithValue("@a", b);

                SqlDataReader DR1 = SqlCommand.ExecuteReader();
                if (DR1.Read())
                {
                    textBox1.Text = DR1.GetString(DR1.GetOrdinal("LastName")).ToString();
                }
            }
        }
    }

表格代码

public string ID
    {
        get { return textBox1.Text; }
    }

        private void textBox1_TextChanged(object sender, EventArgs e)
    {
        userControl21.ID = ID;
        userControl21.sample();
        userControl21.getname();
    }

使用上面的代码,我可以向用户控件显示一条记录。我如何根据数据库中的记录数及其图片和名称显示多个用户控件?例如我在数据库中有 7 条记录,表单将显示 7 个用户控件。当我单击或选择用户控件时,更多信息(例如地址、联系人等)将显示在我的表单中。如果数据库中的记录太多而无法放入表单中,则会出现垂直或水平滚动条。给我一些代码:)

显示可以具有滚动条的用户控件的最佳容器是什么?面板,组框或任何东西?

这必须是样本输出。 有效的 XHTML.

4

2 回答 2

1

在我看来,在您的情况下,最好的容器将FlowLayoutPanelFlowDirection属性设置为FlowDirection.LeftToRight. 这将特别有用,因为您所有的自定义用户控件都具有相同的大小(从我在您的第二个屏幕截图中可以看到)。关于您的第一个问题:您可以创建自己的后代FlowLayoutPanel并添加一些方法,例如 LoadAllItemsFromDataBase ,您可以像现在一样为每条记录创建自定义用户控件,并将其动态添加ControlsFlowLayoutPanel

于 2013-06-03T10:58:37.023 回答
0

我们创建了一个与您所描述的非常相似的视图。我们有一个Container继承自Form并自定义绘制的类(它实际上是一个abstract我们进一步继承的类,以便创建许多类型的容器,它们都具有共同的功能)。我们基于循环访问数据库中的记录以检索有关如何构造的信息,将这些Containers动态添加到控件中。作为它自己的类意味着您可以为您选择的任何事件提供自定义处理程序,例如对用户选择做出反应(以获取更多信息,如地址和联系人)。PanelContainers

在您的示例中,我没有看到您称之为“UserControl”的类。我建议从那里开始。定义“容器”对象的具体类将锚定该项目。

在上一个屏幕截图中,红色轮廓应该是一个Panel控件。 Panel将允许滚动。或者,FlowLayoutControl如果您希望拥有容器的控件能够控制定位和间距,也可以使用 a。我们使用 aPanel来保持对绝对定位的控制。

一旦你有了一个容器类和一个带有 a 的表单Panel,你就可以遍历从数据库中检索到的记录,为每个记录添加一个容器对象,并同时设置它的值(基于示例,一些文本和图像)。

于 2013-06-03T11:05:53.990 回答