C # медленно при загрузке пользовательского интерфейса формы при добавлении строки таблицы - PullRequest
0 голосов
/ 01 июля 2018

Может быть, мои коды немного сложны, но дело в том, что при попытке сделать видимыми некоторые текстовые поля при заполнении таблицы с помощью initializeForm (), мерцает задержка / интерфейс пользователя. Вот пример, см. Форму ввода (слева) Я знаю, что это из-за initializeTbl (), который работает так медленно. Поэтому я поместил его во вторую строку, но каким-то образом он был выполнен одновременно с clearInput (0) или, другими словами, до выполнения clearInput (0).

Я пытался использовать двойной буфер и включить WS_EX_COMPOSITED (без мерцания, но с задержкой около 2 секунд)

public void initializeForm()
        {
            clearInput(0); //Refresh input form, and make all Textbox visible
            initializeTbl(); //Clear and Filling table's Row
        }   

//RESET INPUT PANEL(TO EMPTY) 
public void clearInput(int mode)
        {
            if (this.mode == 0 || mode == 0)
            {
                editKategoriBtn.Visible = false;
                editSatuanBtn.Visible = false;
            }
            this.mode = mode;

            //RESET UI
            if (mode == 0)
                modeInsert();
            else if (mode == 1)
                modeUpdate();

            //REMOVE SATUAN FORM
            persatuanTb.Visible = false;
            satuanLine.Visible = false;


            //RESET FORM TEXT
            satuanDd.Clear();
            kategoriDd.Clear();
            setDDKategori();
            setDDSatuan();

            selectedSatuan = -1;

            idBrgTb.Text = "ID Barang";
            namaBrgTb.Text = "Nama Barang";
            stokBrgTb.Text = "Jumlah Stok";
            persatuanTb.Text = "Satuan(PCS)";
            hargaBeliTb.Text = "Harga Beli";

            setLineColor();

            //RESET VARIABLE
            barangID = "";
            barangName = "";
            checkHargaJual = false;

            //RESET ARRAY
            arrayGrosir = new List<List<WindowsFormsControlLibrary1.BunifuCustomTextbox>> { };
            arrayQty = new List<List<WindowsFormsControlLibrary1.BunifuCustomTextbox>> { };

            arraySatuanHJ = new List<String> { };
            arrayJmlSatuan = new List<String> { };
            arrayHj = new List<LinkLabel> { };

            //RESET HARGA JUAL LINKLABEL
            hjPanel.Controls.Clear();
        }

public void initializeTbl() 
        {
            String id_trans = String.Empty;
            if (tabelBarang.Rows.Count != 0)
            {
                id_trans = Convert.ToString(tabelBarang.SelectedRows[0].Cells["id_brg"].Value);
            }

            int curBaris = tabelBarang.RowCount;

            String filter = "";
            if (searchTb.Text.Count() >= 3 && searchTb.Text != "Cari Barang")
            {
                filter = "AND (tb_barang.id_brg Like '%" + searchTb.Text + "%' OR tb_barang.nama_brg Like '%" + searchTb.Text + "%') ";
            }

            String query = "SELECT DISTINCT id_brg,nama_brg,ctg_name,nama_satuan,convert(DOUBLE PRECISION, jml_satuan) as jml_satuan,convert(DOUBLE PRECISION, stock) as stock FROM " +
                "tb_barang,tb_category,tb_satuan WHERE " +
                "tb_barang.id_kategori=tb_category.ctg_id AND tb_barang.id_satuan=tb_satuan.id_satuan " + filter +
                "ORDER BY stock";

            int newBaris = db.getRowNumber(query);
            if (curBaris != newBaris || searchTb.Text == "Cari Barang")
            {

                if (tabelBarang.Rows.Count != 0)
                    clearTable();
                SqlCommand cmd = new SqlCommand(query, db.sqlcon);
                using (SqlDataReader read = cmd.ExecuteReader())
                {
                    object[] tbBarang;
                    while (read.Read())
                    {
                        object id_brg = read.GetValue(read.GetOrdinal("id_brg"));
                        object nama_brg = read.GetValue(read.GetOrdinal("nama_brg"));
                        object ctg_name = read.GetValue(read.GetOrdinal("ctg_name"));
                        object nama_satuan = read.GetValue(read.GetOrdinal("nama_satuan"));
                        object jml_satuan = read.GetValue(read.GetOrdinal("jml_satuan"));
                        object stock = read.GetValue(read.GetOrdinal("stock"));
                        if (nama_satuan.ToString() != "PCS" && nama_satuan.ToString() != "KG")
                        {
                            jml_satuan += " PCS/" + nama_satuan;
                        }
                        else
                        {
                            jml_satuan += " " + nama_satuan;
                        }


                        if (nama_satuan.ToString() != "KG")
                            stock += " PCS";
                        else
                            stock += " KG";
                        tabelBarang.Rows.Add(tbBarang = new object[] { id_brg, nama_brg, ctg_name, nama_satuan, jml_satuan, stock });
                    }
                }
            }
            if (selectRow(0, id_trans))
            {
                tabelBarang.FirstDisplayedScrollingRowIndex = tabelBarang.SelectedRows[0].Index;
                tabelBarang.PerformLayout();
            }
        }

//SET INPUT FORM TO INSERT MODE
private void modeInsert()
        {
            submitBtn.Text = "TAMBAH BARANG";
            submitBtn.BackColor = Color.Gray;

            searchTb.Text = "Cari Barang";

            stockBrgLbl.Text = "Jumlah Stok";

            satuanBrgLbl.Visible = true;
            satuanBarangPanel.Visible = true;
            //satuanBarangPanel.Enabled = true;

            hargaBeliLbl.Visible = true;
            hargaBeliPnl.Visible = true;
            //hargaBeliPnl.Enabled = true;

            stockBrgLbl.Visible = true;
            stokBarangPnl.Visible = true;
            //stokBarangPnl.Enabled = true;

            persatuanTb.Enabled = true;
        }

//SET INPUT FORM TO UPDATE MODE
private void modeUpdate()
        {
            submitBtn.Text = "UPDATE BARANG";
            submitBtn.BackColor = Color.Orange;

            hargaBeliLbl.Visible = false;
            hargaBeliPnl.Visible = false;

            satuanBrgLbl.Visible = false;
            satuanBarangPanel.Visible = false;

            stockBrgLbl.Visible = false;
            stokBarangPnl.Visible = false;

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