首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#winform在一个panel中固定3列4行的label控件,在数据库中拿到数据。如果数据大于12将做翻页,请教怎么做呢

2013-12-13 
C#winform在一个panel中固定3列4行的label控件,在数据库中拿到数据。如果数据大于12将做翻页,请问如何做呢?

C#winform在一个panel中固定3列4行的label控件,在数据库中拿到数据。如果数据大于12将做翻页,请问如何做呢?

 private void timer4_Tick(object sender, EventArgs e)
        {
            t++;
            this.sql = "select * from sales_tacken where place='" + place + "'";
            DataTable dt = DB.selectDT(DB.cn, this.sql);

            int count = dt.Rows.Count;
            if (count != 0)
            {
                int s = count % 12;
                if (s == 0)
                {
                    int pag = count / 12;
                    int clum = t % pag;

                    int tmp = 0;  //定义tmp这个要在for轮回外面定义 
                    if (dt != null)
                    {
                        panel3.Controls.Clear();
                        if (clum < pag) { pag = 12; } else { pag = s; }

                        int k = -1;
                        for (int i = clum * 12; i < clum * 12 + pag; i++)
                        {
                            k++;
                            int n = k % 3;
                            if (n == 0 && k != 0)
                            {
                                tmp++;//这个前提语句的意思是:若是控件的数量正好是5的倍数的话那么tmp+1  这个是用于把握y轴的
                            }
                            label4.Text = "第" + (clum + 1) + "頁";
                            int l_w = panel3.Width / 3 - 10;//设置行显示几个
                            int l_h = panel3.Height / 4 - 15;//设置显示几列
                            int x = n * (l_w + 10);
                            int y = (l_h + 18) * tmp;     //这里定义的x和y便于把握控件在界面上的地位

                            Label lab = new Label();
                            lab.Location = new System.Drawing.Point(x, y);



                            lab.Name = dt.Rows[i]["barcode"].ToString();
                            // this.nameid = lab.Name.ToString();
                            lab.Font = new Font(F_Style, Convert.ToInt32(lab_no,16), FontStyle.Bold);

                            lab.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;//居中显示
                            lab.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;//显示样式
                            lab.Size = new System.Drawing.Size(l_w+5, l_h);
                            lab.Text = dt.Rows[i]["cinvno"].ToString();
                            
                            panel3.Controls.Add(lab);
                        }
                    }
                }
                else
                {
                    int pag = count / 12 + 1;
                    int clum = t % pag;

                    int tmp = 0;  //定义tmp这个要在for轮回外面定义 
                    if (dt != null)
                    {
                        panel3.Controls.Clear();
                        if (clum < pag - 1) { pag = 12; } else { pag = s; }

                        int k = -1;
                        for (int i = clum * 12; i < clum * 12 + pag; i++)
                        {
                            k++;
                            int n = k % 3;
                            if (n == 0 && k != 0)
                            {
                                tmp++;//这个前提语句的意思是:若是控件的数量正好是5的倍数的话那么tmp+1  这个是用于把握y轴的
                            }
                            label4.Text = "第" + (clum + 1) + "頁";
                            int l_w = panel3.Width / 3 - 10;//设置行显示几个


                            int l_h = panel3.Height / 4 - 15;//设置显示几列
                            int x = n * (l_w + 10);
                            int y = (l_h + 18) * tmp;     //这里定义的x和y便于把握控件在界面上的地位

                            Label lab = new Label();
                            lab.Location = new System.Drawing.Point(x, y);

                            lab.Name = dt.Rows[i]["barcode"].ToString();
                            // this.nameid = lab.Name.ToString();
                            lab.Font = new Font(F_Style, Convert.ToInt32(lab_no,16) ,FontStyle.Bold);

                            lab.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;//居中显示
                            lab.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;//显示样式
                            lab.Size = new System.Drawing.Size(l_w+5, l_h);
                            lab.Text = dt.Rows[i]["cinvno"].ToString();
                          
                            panel3.Controls.Add(lab);
                        }
                    }
                }
            }
            else
            {
                panel3.Controls.Clear();
            }
            dt.Dispose();
            dt.Clear();
           // timer4.Stop();
           // timer4.Dispose();
        }

以上是本人写的一个控制翻页的timer事件。判断了是否刚是12的倍数还是有余数的计算翻页。问题就是每次翻页都要将PANEL中的控件都清理了,在重新生成的12个控件。这样就会使屏幕闪烁。现在客户突然不喜欢闪烁,最好是不需要闪烁就能每12个LANEL 3列4行的进行翻页。。。请问各位大侠们有什么更好的办法呢?我想了很久都没想到好的方法。。我这里说清楚就是一个panel中就放12个了label控件3列4行。。有人说不清panel控件就清label的内容。让固定的12个控件来循环,但是我做不出来。麻烦大虾们帮帮忙。小弟不胜感激。有更好的方法望贴代码分享下。谢谢了
[解决办法]
大概看了一下你的代码,估计你说的不会写问题应该是找控件上


Label lab = new Label();
if(t != 0)
{
    lab = this.Controls["lbl" + i.ToString()] as Label;
}
lab.Name = "lbl" + i.ToString();

热点排行