Создание таблицы ASP.Net происходит очень медленно, есть ли лучшее решение? - PullRequest
1 голос
/ 22 февраля 2010

У меня есть DataTable с 20.000 строк и 15 столбцов. Мне нужно создать таблицу ASP.Net, мой код похож на это:

//foreach Row in my DataTable do the following:


     TableRow t2Row = new TableRow();

                    TableCell t2Cell0 = new TableCell(); t2Cell0.Text = Count.ToString(); t2Row.Cells.Add(t2Cell0);
                    TableCell t2Cell1 = new TableCell(); t2Cell1.Text = dr["col1"].ToString(); t2Row.Cells.Add(t2Cell1);
                    TableCell t2Cell3 = new TableCell(); t2Cell3.Text = dr["col2"].ToString(); t2Row.Cells.Add(t2Cell3);
                    TableCell t2Cell2 = new TableCell(); t2Cell2.Text = dr["col3"].ToString(); t2Row.Cells.Add(t2Cell2);
                    TableCell t2Cell4 = new TableCell(); t2Cell4.Text = dr["col4"].ToString(); t2Row.Cells.Add(t2Cell4);
                    TableCell t2Cell5 = new TableCell(); t2Cell5.Text = ""; t2Row.Cells.Add(t2Cell5);
                    t2Cell5.ColumnSpan = 4;
                    TableCell t2Cell9 = new TableCell(); t2Cell9.Text = convertMinToTime(dr["col6"].ToString(), dr["col7"].ToString()); t2Row.Cells.Add(t2Cell9);
                    TableCell t2Cell10 = new TableCell(); t2Cell10.Text = dr["col8"].ToString(); t2Row.Cells.Add(t2Cell10);
                    TableCell t2Cell11 = new TableCell(); t2Cell11.Text = dr["col9"].ToString(); t2Row.Cells.Add(t2Cell11);
                    TableCell t2Cell12 = new TableCell(); t2Cell12.Text = dr["col10"].ToString(); t2Row.Cells.Add(t2Cell12);
                    TableCell t2Cell13 = new TableCell(); t2Cell13.Text = dr["col11"].ToString(); t2Row.Cells.Add(t2Cell13);

Table my_Table= new Table();
my_Table.Rows.Add(t2Row);

этот код работает очень медленно, есть ли способ ускорить это?

Ответы [ 4 ]

7 голосов
/ 22 февраля 2010

Вы можете использовать Повторитель и поставить <tr> с необходимыми <td> в ItemTemplate.

Сначала проверьте, действительно ли это здание стола, которое занимает много времени. Я предполагаю, что это замедляет процесс передачи и рендеринга HTML-кода для таблицы с 20 000 строками и 15 столбцами.

2 голосов
/ 22 февраля 2010

На ум приходят две мысли:

  • Не получать все строки по 20 КБ, так как вы не могу показать их все равно. Если вам нужна фильтрация, вы можете вернуться к БД, когда вы знаете, что пользователь фильтрация по.

  • Измените SQL для чтения данных, чтобы иметь поля + другие необходимые предметы такие как количество и пустое поле и затем загрузите данные в datatable (datatable.load)

2 голосов
/ 22 февраля 2010

Я бы предложил использовать подход с привязкой к данным, при котором вы фактически связываете свой DataTable, используя элемент управления с привязкой к данным, такой как GridView или Repeater .

С этими элементами управления вы должны использовать свойство DataSource и методы DataBind. Вам не нужно вручную добавлять строки в таблицу и т. Д. Привязка данных позаботится об этих основах.

0 голосов
/ 22 февраля 2010

Вы можете получить более высокую производительность, объявляя всю таблицу в строке HTML с помощью одного Literal или LiteralControl, и / или помещая объявленный HTML в свой собственный пользовательский элемент управления или используйте его повторно. Не будет такой гибкой, но вы не будете создавать почти столько же объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...