sbsbopqb 2022-02-15 15:03 采纳率: 50%
浏览 109
已结题

C# 二维数组填充datagridview慢是什么原因?

C# WinForm程序,用Sqldatareader遍历表,然后放到二维数组里,在填到datatable里,datagridview.datasource=datatable,大体就这思路,显示的没问题,就是速度奇慢,得2分多钟...谁知道问题出在哪里啊?用listview显示也是很慢,2分多钟

18行,48列的数据,还不到1000条
代码如下:
conn = new SqlConnection(connstr);
conn.Open(); //打开数据库连接

          string sql1 = "select medname,medpos from storetable where medpos like '01%' ";
       
       Command cmd1 = new SqlCommand(sql1, conn);
        
        dr1 = cmd1.ExecuteReader();

        string [,] data=new string[50,50]; //二维数组data

        if (dr1.HasRows)
        {
            while (dr1.Read())
            {
                string name = dr1[0].ToString();  //dr1[0]读取的是汉字
                string pos = dr1[1].ToString();    //dr1[1]读取的是数字
                int rownum = int.Parse(pos.Substring(2, 2));
                int colnum = int.Parse(pos.Substring(4, 2));

                data[rownum, colnum] = name;   //把数字对应的汉字放入二维数组,最终显示的时候只显示汉字
               

                DataTable dt = new DataTable(); //创建表

                //新增列
                for (int a = 0; a < 48; a++)
                
                    dt.Columns.Add(data[0, a], typeof(string));

                for (int b = 0; b < 18; b++)
                {
                    DataRow row = dt.NewRow();

                    for (int c = 0; c < 48; c++)
                    {
                        row[c] = data[b + 1, c + 1];
                    }

                    dt.Rows.Add(row);

                }
                    this.dataGridView1.DataSource = dt;

            }
        }
            

       
  • 写回答

2条回答 默认 最新

  • 是小明同学呀 2022-02-15 17:35
    关注
    
                string sql1 = "select medname,medpos from storetable where medpos like '01%' ";
    
                Command cmd1 = new SqlCommand(sql1, conn);
    
                dr1 = cmd1.ExecuteReader();
    
                string[,] data = new string[50, 50]; //二维数组data
                DataTable dt = new DataTable(); //创建表
                this.dataGridView1.DataSource = dt;
                if (dr1.HasRows)
                {
                    while (dr1.Read())
                    {
                        string name = dr1[0].ToString();  //dr1[0]读取的是汉字
                        string pos = dr1[1].ToString();    //dr1[1]读取的是数字
                        int rownum = int.Parse(pos.Substring(2, 2));
                        int colnum = int.Parse(pos.Substring(4, 2));
    
                        data[rownum, colnum] = name;   //把数字对应的汉字放入二维数组,最终显示的时候只显示汉字
                    }
                    //新增列
                    for (int a = 0; a < 48; a++)
    
                        dt.Columns.Add(data[0, a], typeof(string));
                    for (int b = 0; b < 18; b++)
                    {
                        DataRow row = dt.NewRow();
    
                        for (int c = 0; c < 48; c++)
                        {
                            row[c] = data[b + 1, c + 1];
                        }
    
                        dt.Rows.Add(row);
    
                    }
                    
                }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月24日
  • 已采纳回答 2月16日
  • 创建了问题 2月15日

悬赏问题

  • ¥15 写一个bat,根据文件前缀创建文件夹,并将文件移动到对应前缀名称的文件夹内
  • ¥15 数据库原理及应用上机练习题
  • ¥30 征集Python提取PDF文字属性的代码
  • ¥15 如何联系真正的开发者而非公司
  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内