2013-06-03 32 views
0

Valid 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个用户控件。当我点击或选择一个用户控件时,地址,联系人等更多信息将以我的形式显示。如果数据库中的记录太多而无法放入表单中,则会出现垂直或水平滚动条。给我一些代码:)

什么是最好的容器来显示usercontols可以有滚动条?一个面板,groupbox或任何东西?

这必须是样本输出。 Valid XHTML

+0

[动态添加/删除它们](http://stackoverflow.com/questions/4719476/create-controls-dynamically) – Sayse

回答

1

在我看来,你的情况中最好的容器将是FlowLayoutPanel,其FlowDirection属性设置为FlowDirection.LeftToRight。这将是特别有用的,因为您的所有自定义用户控件都具有相同的大小(从我在第二个屏幕快照中可以看到的内容)。而关于你的第一个问题:你可以创建自己的FlowLayoutPanel后裔,并添加像LoadAllItemsFromDataBase一些方法,在那里你可以创建自定义的用户控制每个记录像你现在要做的dinamically它添加到Controls收集FlowLayoutPanel

0

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

在你的例子中,我没有看到你称之为“UserControl”的类。我会建议从那里开始。定义“容器”对象的具体类是什么将定位该项目。

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

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