稀有哦资源供求网

 找回密码
 立即注册
回复: 4

[已解决] DGV表格超多行,需求1W行,如何设计合理

[复制链接]

逆水行舟

1

主题

2

帖子

5

稀币

注册会员

Rank: 1

积分
5
我目前采用的方案,使用dgv表格控件。数据使用的是List集合。

每次点击增加按钮,List集合内的对象+1,dgv表格行数+1
加到三千多行已经很卡了,程序内存也从几十M变到了六百多M。再增加就要反应很久

请问各位大佬我要如何改良方案或者修改方案才能完成我的需求?
回复

使用道具 举报

---------------------------------------------------------------------------------------
Tips:
1、当前版块参与回复竞价排序时,如需增加竞拍金额,可通过编辑进行增量补差价,无需再次全额竞拍.
2、当前版块主题帖免费提问,但标题或内容中,禁止宣传信息.解决方案仅可在回复中提供.如需直接发布广告,请到[广告信息发布区].
3、发布信息中涉嫌恶意,诈骗等不正规网址或信息,可能使访问者造成损失的,将被封号.
4、使用各种方式发布恶意信息,或冒充管理人员的,将被封号.网站管理组成员名单请 点此查看 ,网站唯一联系邮箱为xiyouo@vip.qq.com.
---------------------------------------------------------------------------------------


exception92

0

主题

1

帖子

0

稀币

注册会员

Rank: 1

积分
0
只有三列,1 万条数据并不算大,还是找找其他原因吧,把代码贴出来看看。
我试过,显示10 万条都没问题,是要不是异常 OutofMemory。
回复

使用道具 举报


逆水行舟

1

主题

2

帖子

5

稀币

注册会员

Rank: 1

积分
5
 楼主| | 显示全部楼层
是吗。我给你看看代码


C# code
          private void btn_add_Click(object sender, EventArgs e)
            {
            changevalue = false;
            int IDnumber = 1;
            if (datalinker.Count < 10000)
           {
                bool include = false;
                bool file = true;
                string Newname = "";
                DataGridViewRow r = new DataGridViewRow();
                List<string> name = new List<string>();
                 
                。。。。。。。
  
                datalinker.Add(new DataLinker());
                datalinker[datalinker.Count - 1].Linker_name = Newname;
                datalinker[datalinker.Count - 1].Linker_ID = idnumber.ToString().PadLeft(7, '0');
                r.CreateCells(dgv_linker);
                dgv_linker.Rows.Add(r);
            }
             LoadData();
        }
           
回复

使用道具 举报


黄生

1

主题

2

帖子

3

稀币

注册会员

Rank: 1

积分
3
C# code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApp8
{
    public partial class Form1 : Form
    {

        DataTable dt = new DataTable();
        int count = 100000;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            initTable();
            DataBinds();
            timer1.Start();
        }

        private void initTable()
        {
            DataColumn dc = new DataColumn("序号", typeof(string));
            dt.Columns.Add(dc);
            dc = new DataColumn("呼叫别名", typeof(string));
            dt.Columns.Add(dc);
            dc = new DataColumn("呼叫人ID号", typeof(string));
            dt.Columns.Add(dc);
            dc = new DataColumn("呼叫类型", typeof(string));
            dt.Columns.Add(dc);

            for (int i = 1; i < 99999; i++)
            {
                dt.Rows.Add(i.ToString(), "张三" + i.ToString(),i.ToString(),"电话");
            }

        }

        private void DataBinds()
        {
            this.dataGridView1.DataSource = dt;
            dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView1.RowCount - 1;
        }

        private void btnInsert_Click(object sender, EventArgs e)
        {
            //在10000条后插入
            DataRow dr = dt.NewRow();
            dr["序号"] = 10001;
            dr["呼叫别名"] = "插入列";
            dr["呼叫人ID号"] = 10001;
            dr["呼叫类型"] = "电话";
            dt.Rows.InsertAt(dr,10000);

            DataBinds();
            MessageBox.Show("成功");
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            dt.Rows.Add(count.ToString(), "张三" + count.ToString(), count.ToString(), "电话");
            count++;
            DataBinds();
        }

    }
}
回复

使用道具 举报


正怒月神

0

主题

1

帖子

3

稀币

注册会员

Rank: 1

积分
3
那你尝试把显示和插入,分开来。
插入就是单独的插入功能。
显示的dgv,采用分页,从list中读取(最好把list都存入redis中。)每次分页都去redis中读取。
而不是从list分页拿取。List只作为读取的分页数据的数据源。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

      

关于我们|联系我们|稀有哦资源供求网 | 网站统计

GMT+8, 2024-11-21 20:48

Origins Since 1919 © Singapore Yongxin Association , Inc. or its affiliates

快速回复 返回顶部 返回列表