为什么我觉得特别慢的呢
        int tiaoshu = 1, i = 1, j = 0, gao = 0, kuan = 0, ding = 0, zuo = 0;
        public void hjlabel(string wenben)
        {
            Label hj = new Label();
            hj.Height = gao;
            hj.Width = kuan;
            hj.Left = zuo;
            hj.Top = ding;
            hj.TextAlign = ContentAlignment.MiddleLeft;
            if (j == 1)
            {
                hj.BackColor = SystemColors.Control;
            }
            else
            {
                hj.BackColor = Color.White;
            }
            hj.Text = wenben;
            tabPage1.Controls.Add(hj);
        }
        public void jianbiao()
        {
            OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\xxxx.mdb");
            string sql = "SELECT * FROM xxxx";
            OleDbCommand cmd = new OleDbCommand(sql, conn);
            conn.Open();
            cmd.ExecuteScalar();
            OleDbDataReader reader = cmd.ExecuteReader();
            gao = 24;
            kuan = 30;
            hjlabel("序号");
            zuo = kuan;
            kuan = 160;
            hjlabel("内容");
            zuo += kuan;
            kuan = 78;
            hjlabel("时间");
            while (reader.Read())
            {
                tiaoshu++;
                if (j == 1)
                { j = 0; }
                else { j = 1; }
                kuan = 30;
                zuo = 0;
                ding = 24 * i;
                hjlabel(Convert.ToString(i));
                zuo = kuan;
                kuan = 160;
                hjlabel(reader["neirong"].ToString());
                zuo += kuan;
                kuan = 78;
                hjlabel(Convert.ToString(reader["shijian"]));
                i++;
            }
            this.Text = "你的数据库有" + (tiaoshu - 1) + "条数据";
            reader.Close();
            conn.Close();
        }
请各位高手帮我分析一下我这么做是不是效率降低了,如何才能提高效率

解决方案 »

  1.   

     if (j == 1)
      { j = 0; }
      else { j = 1; }
    用个报表一下子就显示了。写那么多做什么?
      

  2.   

     this.DoubleBuffered = true; // 设置双缓冲
     
     Label[] arrLabel = new Label[RowsCount * ColumnsCount];
     this.panel1.SuspendLayout();
    //..
     panel.Controls.AddRange(arrLabel);
    this.panel1.ResumeLayout();
    动态添加label
      

  3.   

    2楼的这位,你写的也太简略了吧。
    还有panel.Controls.AddRange(arrLabel)中的arrLabel是不是不能为二维数组啊,设置成二维数组就出错,只能用一维数组的话就需要在panel里面嵌label,好像也很慢了啊
      

  4.   

    2楼的意思是不是这样?         int tiaoshu = 0, k = 0;
            int[] kuan ={ 30, 160, 78 };
            int[] zuo ={ 0, 30, 190 };
            private void Form1_Load(object sender, EventArgs e)
            {
                OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\xxxx.mdb");
                string sql = "SELECT * FROM xxxx WHERE     (shifou = 0)";
                OleDbCommand cmd = new OleDbCommand(sql, conn);
                conn.Open();
                cmd.ExecuteScalar();
                OleDbDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                        renwutiaoshu++;
                }
                OleDbDataAdapter oda = new OleDbDataAdapter();
                oda.SelectCommand = new OleDbCommand(sql, conn);
                DataSet ds = new DataSet();
                oda.Fill(ds, "xxxx");            this.DoubleBuffered = true;
                Label[,] lbl = new Label[ tiaoshu,3];
                Label[] hjlbl = new Label[3 * tiaoshu];
                //tabPage1.SuspendLayout;
                for (int i = 0; i <tiaoshu; i++)
                {
                    for (int j = 0; j < 3; j++)
                    {
                        lbl[i, j] = new Label();
                        lbl[i, j].Height = 24;
                        lbl[i, j].Width = kuan[j];
                        lbl[i, j].TextAlign = ContentAlignment.MiddleLeft;
                        lbl[i, j].Location = new Point(zuo[j], i * 24);
                        if (i % 2 == 0)
                        {
                            lbl[i, j].BackColor = SystemColors.Control;
                        }
                        else
                        {
                            lbl[i, j].BackColor = Color.White;
                        }
                        lbl[i, j].Text = Convert.ToString(ds.Tables[0].Rows[i].ItemArray.GetValue(j));
                        hjlbl[k] = lbl[i, j];
                        k++;
                    }
                }            tabPage1.Controls.AddRange(hjlbl);
                //tabPage1.ResumeLayout();
                this.Text = "数据库有" + tiaoshu + "条记录";
                reader.Close();
                conn.Close();
            }
      

  5.   

    我只能做了二维数组之后再赋值给一个一维数组,再绑定到生成的label组里面其实好想说:高手惜字如金,菜鸟汗流浃背,你就不能多写几行代码吗?这样我花的力气会小多了还有,希望二楼回复一下你的意思是不是这样做,还有什么可以改的地方?不然我就不结贴给分。另外,你要我挂起控件布局逻辑的两行代码我不知道作用是什么?