0

I am building a winform Application. I have to create buttons dynamically based on data fetched from database. I followed following steps

Created UserControl
On UserControl_Load event I fetched data from database.
I populated the UserControl with buttons based on number of rows i get from the database.

The above approach proved too slow. The form loads slowly. It takes time to populate buttons. So Which is the best and optimised way to load controls dynamically in C# winforms?

here is my code

public ucFileCategoryPane()
        {
            InitializeComponent();
            PopulateNavPane();
        }

        public void PopulateNavPane()
        {
            tblFileController f = new tblFileController();
            List<tblFile> lfile = f.FileList();

            foreach (tblFile t in lfile)
            {
                vNavPaneItem vNavPaneItem2 = GetItemPanel(t);
                vnpFiles.Items.Add(vNavPaneItem2);
            }

            if (vnpFiles.Items.Count > 0)
            {
                string header = vnpFiles.Items[0].HeaderText;
                Connection.DbName = header;
                ListView li = CreateCategoryList(header);
                vnpFiles.Items[0].ItemPanel.Controls.Add(li);
            }
        }

        public vNavPaneItem GetItemPanel(tblFile t)
        {
            string ItemPanelName = "vip" + t.FileName;
            string ItemName = "vi" + t.FileName;
            string ItemText = t.FileName + " => Categories";
            vNavPaneItem vNavPaneItem2 = new vNavPaneItem();
            vNavPaneItem2.BackColor = System.Drawing.Color.White;
            vNavPaneItem2.HeaderText = t.FileName;
            vNavPaneItem2.ItemPanel.AutoScroll = true;
            vNavPaneItem2.ItemPanel.Location = new System.Drawing.Point(1, 30);
            vNavPaneItem2.ItemPanel.Name = ItemPanelName;
            vNavPaneItem2.ItemPanel.Size = new System.Drawing.Size(198, 168);
            vNavPaneItem2.ItemPanel.TabIndex = 1;
            vNavPaneItem2.Location = new System.Drawing.Point(0, 0);
            vNavPaneItem2.Name = ItemName;
            vNavPaneItem2.Size = new System.Drawing.Size(200, 199);
            vNavPaneItem2.TabIndex = 0;
            vNavPaneItem2.Text = ItemText;
            vNavPaneItem2.TooltipText = ItemText;
            vNavPaneItem2.Click += new EventHandler(vNavPaneItem2_Click);

            return vNavPaneItem2;
        }

Edited by MARKAND911

2
Contributors
3
Replies
16
Views
3 Years
Discussion Span
Last Post by deceptikon
0

I understand that. What I want is an actual number that you expect on average, because that can affect the performance of your user control.

This article has been dead for over six months. Start a new discussion instead.
Be sure to adhere to our posting rules.