powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / datagridview (скорость заполнения таблицы)
11 сообщений из 11, страница 1 из 1
datagridview (скорость заполнения таблицы)
    #38900049
Mixon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую ВСЕХ!
есть datagridview, заполняю данными из запроса,
запрос типа Select aaa,bbb,xxx_0,zzz_0,xxx_1,zzz_1..... и так далее
запрос возвращает около 1к записей и загрузка длится приблизительно 5-10 секунд, данные из запроса читаются почти моментально.

Вопрос как ускорить работу грида?
если пойти путем Биндинга данных, как реализовать связывание с объектом состоящим из списка полей?
(типа class x{list<z> zz} class z{public int a; public string b; ....})


пример заполнения грида
gridView.Rows.Add();
gridView.Rows[gridView.Rows.Count - 1].Cells[0].Style.BackColor = System.Drawing.Color.FromArgb(235, 235, 235);
gridView.Rows[gridView.Rows.Count - 1].Cells[1].Style.BackColor = System.Drawing.Color.FromArgb(235, 235, 235);
gridView.Rows[gridView.Rows.Count - 1].Cells[2].Style.BackColor = System.Drawing.Color.FromArgb(235, 235, 235);

gridView.Rows[gridView.Rows.Count - 1].Cells[0].Value = false;
gridView.Rows[gridView.Rows.Count - 1].Cells[1].Value = reader["aaa"].ToString();
gridView.Rows[gridView.Rows.Count - 1].Cells[2].Value = reader["bbb"].ToString();
int temp = 0;
for (int i = 0; i < list.Count; i++)
{
gridView.Rows[gridView.Rows.Count - 1].Cells[3 + i].ReadOnly = (reader["xxx_" + list[i].ToString()] == DBNull.Value);
gridView.Rows[gridView.Rows.Count - 1].Cells[3 + i].Style.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight;
if (!gridView.Rows[gridView.Rows.Count - 1].Cells[3 + i].ReadOnly)
{
gridView.Rows[gridView.Rows.Count - 1].Cells[3 + i].Value = reader["zzz_" + list[i].ToString()].ToString();
}
}
...
Рейтинг: 0 / 0
datagridview (скорость заполнения таблицы)
    #38900056
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mixon,

Определенно, разбить на страницы. 5-10 секунд... Не каждый захочет ждать столько. Это не юзер-фриендли, да и на какой столько строк сразу выводить? Еще лучше - поиск по ключевым полям забацать.
...
Рейтинг: 0 / 0
datagridview (скорость заполнения таблицы)
    #38900068
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mixon пример заполнения грида
gridView.Rows.Add();
...

Не пробовали так?
gridView.DataSource = new BindingList<ИМЯ_КЛАССА>(Запрос, возвращающий IEnumerable<ИМЯ_КЛАССА>)
...
Рейтинг: 0 / 0
datagridview (скорость заполнения таблицы)
    #38900096
Mixon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79Mixon пример заполнения грида
gridView.Rows.Add();
...

Не пробовали так?
gridView.DataSource = new BindingList<ИМЯ_КЛАССА>(Запрос, возвращающий IEnumerable<ИМЯ_КЛАССА>)

как C# это поймет?

class x
{
public list<z> zz
}

class z
{
public int a;
public string b;
....
}

gridView.DataSource = new BindingList<x>(Запрос, возвращающий IEnumerable<ИМЯ_КЛАССА>)
...
Рейтинг: 0 / 0
datagridview (скорость заполнения таблицы)
    #38900107
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mixon,
Учимся использовать тэги оформления кода - FAQ
...
Рейтинг: 0 / 0
datagridview (скорость заполнения таблицы)
    #38900122
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mixon,

Что мешает сделать джойн?

Не это нужно?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var lst = new List<x>(
                new[]
                    {
                        new x() {Id = 1, yy = new List<y>(new[] {new y() {y1 = "11", y2 = "12"},})},
                        new x() {Id = 2, yy = new List<y>(new[] {new y() {y1 = "21", y2 = "22"},})},
                        new x() {Id = 3, yy = new List<y>(new[] {new y() {y1 = "31", y2 = "32"},})}
                    });

            var view = lst.SelectMany(i => i.yy.Select(ii => new z() {Id = i.Id, y1 = ii.y1, y2 = ii.y2})).ToList();
            dataGridView1.DataSource = new BindingList<z>(view);
        }
    }

    public class z
    {
        public int Id { get; set; }
        public string y1 { get; set; }
        public string y2 { get; set; }
    }

    public class x
    {
        public int Id { get; set; }
        public List<y> yy { get; set; }
    }

    public class y
    {
        public string y1 { get; set; }
        public string y2 { get; set; }
    }
...
Рейтинг: 0 / 0
datagridview (скорость заполнения таблицы)
    #38900157
Mixon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробую, спасибо!
Arm79Mixon,

Что мешает сделать джойн?

Не это нужно?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var lst = new List<x>(
                new[]
                    {
                        new x() {Id = 1, yy = new List<y>(new[] {new y() {y1 = "11", y2 = "12"},})},
                        new x() {Id = 2, yy = new List<y>(new[] {new y() {y1 = "21", y2 = "22"},})},
                        new x() {Id = 3, yy = new List<y>(new[] {new y() {y1 = "31", y2 = "32"},})}
                    });

            var view = lst.SelectMany(i => i.yy.Select(ii => new z() {Id = i.Id, y1 = ii.y1, y2 = ii.y2})).ToList();
            dataGridView1.DataSource = new BindingList<z>(view);
        }
    }

    public class z
    {
        public int Id { get; set; }
        public string y1 { get; set; }
        public string y2 { get; set; }
    }

    public class x
    {
        public int Id { get; set; }
        public List<y> yy { get; set; }
    }

    public class y
    {
        public string y1 { get; set; }
        public string y2 { get; set; }
    }
...
Рейтинг: 0 / 0
datagridview (скорость заполнения таблицы)
    #38900194
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забавно как все-таки некоторые люди упорно выбирают неверную дорогу: на пути они теряют коней, переходят вброд озера, перелезают через скалы, ломают руки-ноги, но они упорно выбирают неверный путь. Потому что в голове у них... Да кто ж его знает что у них там...
...
Рейтинг: 0 / 0
datagridview (скорость заполнения таблицы)
    #38900251
Mixon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проблема была в
MixonПриветствую ВСЕХ!
есть datagridview, заполняю данными из запроса,
запрос типа Select aaa,bbb,xxx_0,zzz_0,xxx_1,zzz_1..... и так далее
запрос возвращает около 1к записей и загрузка длится приблизительно 5-10 секунд, данные из запроса читаются почти моментально.

Вопрос как ускорить работу грида?
если пойти путем Биндинга данных, как реализовать связывание с объектом состоящим из списка полей?
(типа class x{list<z> zz} class z{public int a; public string b; ....})


пример заполнения грида
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
gridView.Rows.Add();
gridView.Rows[gridView.Rows.Count - 1].Cells[0].Style.BackColor = System.Drawing.Color.FromArgb(235, 235, 235);
gridView.Rows[gridView.Rows.Count - 1].Cells[1].Style.BackColor = System.Drawing.Color.FromArgb(235, 235, 235);
gridView.Rows[gridView.Rows.Count - 1].Cells[2].Style.BackColor = System.Drawing.Color.FromArgb(235, 235, 235);

gridView.Rows[gridView.Rows.Count - 1].Cells[0].Value = false;
gridView.Rows[gridView.Rows.Count - 1].Cells[1].Value = reader["aaa"].ToString();
gridView.Rows[gridView.Rows.Count - 1].Cells[2].Value = reader["bbb"].ToString();
int temp = 0;
for (int i = 0; i < list.Count; i++)
{
gridView.Rows[gridView.Rows.Count - 1].Cells[3 + i].ReadOnly = (reader["xxx_" + list[i].ToString()] == DBNull.Value);
[color=red]gridView.Rows[gridView.Rows.Count - 1].Cells[3 + i].Style.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight;[/color]
if (!gridView.Rows[gridView.Rows.Count - 1].Cells[3 + i].ReadOnly)
{
gridView.Rows[gridView.Rows.Count - 1].Cells[3 + i].Value = reader["zzz_" + list[i].ToString()].ToString();
}
}
...
Рейтинг: 0 / 0
datagridview (скорость заполнения таблицы)
    #38900253
Mixon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mixon,
gridView.Rows[gridView.Rows.Count - 1].Cells[3 + i].Style.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight;
...
Рейтинг: 0 / 0
datagridview (скорость заполнения таблицы)
    #38900348
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MixonMixon,
gridView.Rows[gridView.Rows.Count - 1].Cells[3 + i].Style.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight;

Ах, так вот оно в чем проблема-то была оказывается!
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / datagridview (скорость заполнения таблицы)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]