解决方案 »

  1.   

    自定义控件,名字叫UCControl,在主窗体里根据需要for 循环 new UCControl,最后加到主控窗体Controls里就可以了
      

  2.   

    谢谢!忘了说了是桌面程序,非web项目
      

  3.   

    生成“小方块”当然就写 var x= new 小方块();啦。而插入控件,遵循所有可包括内容控件的(父类)接口协议,那么当然就是向其 Child 集合属性(对于15年前的 winform 控件就是 Controls 集合属性)插入x。可以参考我以前回复的一个帖子:http://bbs.csdn.net/topics/390820186
      

  4.   

    你的“小方块”应该是一个独立的UserConrol,这是你的程序设计的重点。至于写上5、6行代码把多个“小方块”放到布局控件内部(例如放到Grid内部),其实不需要什么技术。
      

  5.   

    private void button8_Click(object sender, EventArgs e)
            {
                int num = 0;
                DataTable dt = GetData();//你可以将数据库里数据取出填充到DataTable 中,
                dataGridView1.DataSource = dt;
                for (int i = 0; i < dt.Rows.Count; i++)
                {             
                    int n = dataGridView1.Rows.Count - 1;
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {                    int h = num / 3;
                        int v = num % 3;
                        TextBox txt = new TextBox();
     
                        txt.Location = new Point(h * 37 + 19, v * 35 + 56); 
                        txt.Size = new Size(30, 29);
                        txt.Margin = new System.Windows.Forms.Padding(3);
                        txt.Text = dt.Rows[i].ItemArray[j].ToString();
                        //在groupBox1中增加TextBox;
                        this.groupBox1.Controls.Add(txt);
                        num++;                  
                    }
                    n++;
                }
            } private System.Data.DataTable GetData()
            {
                System.Data.DataTable tableInfo = new System.Data.DataTable();            DataColumn dctime = new DataColumn("Time", Type.GetType("System.String"));
                DataColumn dcCity = new DataColumn("City", Type.GetType("System.String"));
                DataColumn dcCount = new DataColumn("Count", Type.GetType("System.Int32"));
                tableInfo.Columns.Add(dctime);
                tableInfo.Columns.Add(dcCity);
                tableInfo.Columns.Add(dcCount);
                DataRow dr = tableInfo.NewRow();
                dr["Time"] = "1:00";
                dr["City"] = "10";
                dr["Count"] = "15";
                tableInfo.Rows.Add(dr);
                DataRow dr1 = tableInfo.NewRow();
                dr1["Time"] = "2:00";
                dr1["City"] = "12";
                dr1["Count"] = "19";
                tableInfo.Rows.Add(dr1);
                DataRow dr2 = tableInfo.NewRow();
                dr2["Time"] = "3:00";
                dr2["City"] = "13";
                dr2["Count"] = "25";
                tableInfo.Rows.Add(dr2);
                DataRow dr3 = tableInfo.NewRow();
                dr3["Time"] = "4:00";
                dr3["City"] = "14";
                dr3["Count"] = "10";
                tableInfo.Rows.Add(dr3);            DataRow dr4 = tableInfo.NewRow();
                dr4["Time"] = "5:00";
                dr4["City"] = "15";
                dr4["Count"] = "11";
                tableInfo.Rows.Add(dr4);            DataRow dr5 = tableInfo.NewRow();
                dr5["Time"] = "6:00";
                dr5["City"] = "16";
                dr5["Count"] = "17";
                tableInfo.Rows.Add(dr5);            DataRow dr6 = tableInfo.NewRow();
                dr6["Time"] = "7:00";
                dr6["City"] = "17";
                dr6["Count"] = "20";
                tableInfo.Rows.Add(dr6);            DataRow dr7 = tableInfo.NewRow();
                dr7["Time"] = "8:00";
                dr7["City"] = "12";
                dr7["Count"] = "13";
                tableInfo.Rows.Add(dr7);
                return tableInfo;
            }
      

  6.   

    用Panel、PictureBox都可以,自己画下。也可以做成用户控件。怕麻烦也可以用Grid冒充。
      

  7.   

    可以参考下,拍一行 lanble 的代码 dt1 = Me.Pm_DataOp_sqlide.OpenDatatable(strcmd)            Dim row1 As DataRow
                Me.Panel4.Controls.Clear()
                Dim v_n As Integer = 100
                Dim n2 As Integer = 0            For Each row1 In dt1.Rows
                    Dim lab1 As New Label
                    lab1.Tag = row1.Item("group_no")
                    lab1.Text = "Group:" & row1.Item("group_no")
                    Me.Panel4.Controls.Add(lab1)
                    lab1.Width = 60
                    lab1.Height = Me.Panel4.Height
                    lab1.Left = lab1.Width * n2 + 5 * n2
                    'lab1.AutoSize = True
                    'lab1.Dock = DockStyle.Left
                    'lab1.SendToBack()
                    lab1.BringToFront()
                    Dim v_g_n As Integer
                    v_g_n = 50 + v_n
                    If v_g_n > 255 Then
                        v_g_n = 255
                    End If
                    lab1.BackColor = System.Drawing.Color.FromArgb(255, 50 + 0, v_g_n, 50)
                    AddHandler lab1.Click, AddressOf Me.Labelx_Click                v_n = v_n + 15                n2 = n2 + 1            Next
      

  8.   


    你怎么知道是 Label 呢?
      

  9.   

    usecontrol+flowlayoutpanel 
    或直接listview
      

  10.   


    你怎么知道是 Label 呢?
    什么意思....
      

  11.   

    一个小方块(div+css就出来了,如果还需美观一点,配点背景图片类的)就是一个单元,包含相关数据加载业务逻辑,你下拉框选择多少item数量,就按需求输出循环输出多少个小方块就行了。
      

  12.   


    /// <summary>
            /// 动态生成为数据库字段输入描述信息的textbox
            /// </summary>
            /// <param name="row"></param>
            /// <param name="line"></param>
            /// <param name="p"></param>
            /// <param name="list"></param>
            private void SetTextBox(int row,int line,Panel p,IList list)
            {
                TextBox tb = null;
                for (int i = 0; i < line; i++) 
                {
                    for (int j = 0; j < row; j++) 
                    {
                        tb = new TextBox();
                        tb.Size = new System.Drawing.Size(100,21);
                        tb.Name = "txt" + list[j].ToString();
                        //tb.TextAlign = HorizontalAlignment.Center;
                        tb.Location = new Point(250 + (i * 90), 30 + (j * 60));
                        p.Controls.Add(tb);
                    }
                }
            }
    /// <summary>
            /// 动态生成数据库字段对应的数据类型
            /// </summary>
            /// <param name="row"></param>
            /// <param name="line"></param>
            /// <param name="p"></param>
            /// <param name="list"></param>
            private void SetClassType(int row, int line, Panel p, IList list) 
            {
                Label label = null;
                for (int i = 0; i < line; i++)
                {
                    for (int j = 0; j < row; j++)
                    {
                        label = new Label();
                        //设置背景颜色
                        //label.BackColor = Color.Yellow;
                        //设置字体
                        label.Font = new System.Drawing.Font("宋体", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
                        //设置尺寸
                        label.AutoSize = false;
                        label.Size = new System.Drawing.Size(70, 25);
                        //设置座位号
                        label.Text = list[j].ToString();
                        label.TextAlign = ContentAlignment.MiddleCenter;
                        //设置位置
                        label.Location = new Point(150 + (i * 90), 30 + (j * 60));                    p.Controls.Add(label);
                    }
                }
            }/// <summary>
            /// 动态生成数据库字段
            /// </summary>
            /// <param name="row"></param>
            /// <param name="cell"></param>
            /// <param name="p"></param>
            /// <param name="list"></param>
            private void SetLable(int row,int cell,Panel p,IList list)
            {
                Label label = null;
                for (int i = 0; i < cell; i++) 
                {
                    for (int j = 0; j < row; j++) 
                    {
                        label = new Label();
                        //设置背景颜色
                        //label.BackColor = Color.Yellow;
                        //设置字体
                        label.Font = new System.Drawing.Font("宋体", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
                        //设置尺寸
                        label.AutoSize = false;
                        label.Size = new System.Drawing.Size(100, 25);
                        //设置座位号
                        label.Text = list[j].ToString();
                        label.TextAlign = ContentAlignment.MiddleCenter;
                        //设置位置
                        label.Location = new Point(30 + (i * 90), 30 + (j * 60));
                        
                        p.Controls.Add(label);
                    }
                }
            }
      

  13.   

    你的问题其实就是怎么循环出多个小方块,自己用BUTTON也好,自定义控件也好,把这个循环做出来就行了。 自己查一下,动态循环控件foreach (Control c in Page.Controls) 

    if (c is Label) 

    Label l = c as Label; Response.Write("!!!!" + l.Text.ToString() + "<br />"); 

    }你能循环出来了,其他的数据长度查出多少就循环多少个这不能算问题了