C# - Как отобразить данные объекта в TableLayoutPanel. Оптимизация кода повышение производительности
Здравствуйте друзья,
Я написал следующий код для заполнения данных из объекта в элементе управления tablelayoutpanel. Он работает :), но когда он загружает данные в таблицу, он мерцает/прыгает в течение нескольких секунд, а затем через 2-3 секунды, когда он закончил обработку данных, он заполняет данные :( . я считаю, что это поведение связано с кодом, написанным для динамической обработки и рисования различных элементов управления в таблице на основе данных объекта.
Мне нужна ваша помощь в оптимизации кода/повышении производительности этого кода, чтобы таблица могла загружаться плавно и быстро. Пожалуйста помочь. Спасибо.
PS: этот код написан для таблицы, содержащей небольшое количество данных. Но в дальнейшем то же самое планируется сделать и для заполнения таблицы в 4 раза большим количеством данных. Если это так, то производительность будет очень плохой, что меня беспокоит. Пожалуйста, предложите несколько идей.
private void button1_Click(object sender, EventArgs e) { Common obj = new Common(); obj.CreateDeserializedXmlObject(@"E:\TestReport.xml"); var v = obj.GetAdminData(); tableLayoutPanel1.ColumnCount = 4; tableLayoutPanel1.RowCount = ((v.DOCREVISIONS.Length * 4) + 1 + (v.USEDLANGUAGES.L10.Length)); Label labelLanguage = new Label(); Label labelUsedLanguage = new Label(); Label labelDocRevisions = new Label(); labelLanguage.Text = "Language:"; labelUsedLanguage.Text = "Used Language:"; labelDocRevisions.Text = "Doc-Revisions:"; ComboBox comboBoxLanguage = new ComboBox(); comboBoxLanguage.Items.Add(v.LANGUAGE.Value.ToString()); comboBoxLanguage.SelectedIndex = 0; ComboBox comboBoxUsedLanguage = new ComboBox(); foreach (LPLAINTEXT Lang in v.USEDLANGUAGES.L10) { comboBoxUsedLanguage.Items.Add(Lang.L.ToString()); } comboBoxUsedLanguage.SelectedIndex = 0; int index = 0; Label[] labelDocRevision = new Label[v.DOCREVISIONS.Length]; Label[] labelRevision = new Label[v.DOCREVISIONS.Length]; Label[] labelState = new Label[v.DOCREVISIONS.Length]; Label[] labelTeamMember = new Label[v.DOCREVISIONS.Length]; Label[] labelDate = new Label[v.DOCREVISIONS.Length]; TextBox[] textBoxRevision = new TextBox[v.DOCREVISIONS.Length]; TextBox[] textBoxState = new TextBox[v.DOCREVISIONS.Length]; TextBox[] textBoxTeamMember = new TextBox[v.DOCREVISIONS.Length]; TextBox[] textBoxDate = new TextBox[v.DOCREVISIONS.Length]; foreach (DOCREVISION dcr in v.DOCREVISIONS) { labelDocRevision[index] = new Label(); labelRevision[index] = new Label(); labelState[index] = new Label(); labelTeamMember[index] = new Label(); labelDate[index] = new Label(); textBoxRevision[index] = new TextBox(); textBoxState[index] = new TextBox(); textBoxTeamMember[index] = new TextBox(); textBoxDate[index] = new TextBox(); labelDocRevision[index].Text = "DOCREVISION["+index.ToString()+"]:"; labelRevision[index].Text = "Revision:"; labelState[index].Text = "State:"; labelTeamMember[index].Text = "TeamMemberRef:"; labelDate[index].Text = "Date:"; textBoxRevision[index].Text = dcr.REVISIONLABEL.Value.ToString(); textBoxState[index].Text = dcr.STATE.Value.ToString(); textBoxTeamMember[index].Text = dcr.TEAMMEMBERREF.Value.ToString(); textBoxDate[index].Text = dcr.DATE.Value.ToString(); index++; } // Add child controls to TableLayoutPanel and specify rows and column tableLayoutPanel1.Controls.Add(labelLanguage, 0, 0); tableLayoutPanel1.Controls.Add(labelUsedLanguage, 0, 1); tableLayoutPanel1.Controls.Add(labelDocRevisions, 0, 2); tableLayoutPanel1.Controls.Add(comboBoxLanguage, 1, 0); tableLayoutPanel1.Controls.Add(comboBoxUsedLanguage, 1, 1); int docRevRowSpacing = 2; for (int loop = 0; loop < index; loop++) { tableLayoutPanel1.Controls.Add(labelDocRevision[loop], 1, docRevRowSpacing); tableLayoutPanel1.Controls.Add(labelRevision[loop], 2, docRevRowSpacing); tableLayoutPanel1.Controls.Add(labelState[loop], 2, docRevRowSpacing+1); tableLayoutPanel1.Controls.Add(labelTeamMember[loop], 2, docRevRowSpacing+2); tableLayoutPanel1.Controls.Add(labelDate[loop], 2, docRevRowSpacing+3); tableLayoutPanel1.Controls.Add(textBoxRevision[loop], 3, docRevRowSpacing); tableLayoutPanel1.Controls.Add(textBoxState[loop], 3, docRevRowSpacing+1); tableLayoutPanel1.Controls.Add(textBoxTeamMember[loop],3 , docRevRowSpacing+2); tableLayoutPanel1.Controls.Add(textBoxDate[loop], 3, docRevRowSpacing+3); docRevRowSpacing += 4; } tableLayoutPanel1.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single; Controls.Add(this.tableLayoutPanel1); }