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 2 Years Ago by MARKAND911

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.