Создать ProgressBar при заполнении TreeView - PullRequest
0 голосов
/ 19 июня 2019

Мне нужно создать простую панель Progressbar, когда TreeView загружается из базы данных, и потому что он находится в режиме онлайн-базы данных, для отображения формы, содержащей этот TreeView, требуется несколько раз.

Это то, что я сделал, но не знаю, как / где поставить «progressbar.PerformStep ()» или рад узнать, как это сделать.

private void FormMain_Load(object sender, EventArgs e)
{
    String myConnectionString = "server=...";
    try
    {
        conn = new MySqlConnection(myConnectionString);
        String Sequel = "SELECT ...";
        MySqlDataAdapter da = new MySqlDataAdapter(Sequel, conn);
        DataTable dt = new DataTable();

        conn.Open();
        da.Fill(dt);

        foreach (DataRow dr in dt.Rows)
        {
            parentNode = MainTreeView.Nodes.Add(dr["NODNAME"].ToString());
            parentNode.Tag = ...;

            PopulateTreeView(Convert.ToInt32(dr["PARVAL"].ToString()), parentNode);
        }
    }
    catch (MySqlException ex)
    {
        MessageBox.Show(ex.Message);
    }
}

private void PopulateTreeView(int parentId, TreeNode parentNode)
{
    String Seqchildc = "SELECT PARVAL, SUBNODNAME, SUBNODVAL FROM subparentnod WHERE PARVAL=" + parentId + "";
    MySqlDataAdapter daChild = new MySqlDataAdapter(Seqchildc, conn);

    DataTable dtChild = new DataTable();
    daChild.Fill(dtChild);

    TreeNode childNode;
    foreach (DataRow dr in dtChild.Rows)
    {
        if (parentNode == null)
        {
            childNode = MainTreeView.Nodes.Add(dr["SUBNODNAME"].ToString());
            childNode.Tag = dr["SUBNODNAME"].ToString();
        }
        else
        {
            childNode = parentNode.Nodes.Add(dr["SUBNODNAME"].ToString());
            childNode.Tag = dr["SUBNODNAME"].ToString();
        }
        PopulateTreeView(Convert.ToInt32(dr["SUBNODVAL"].ToString()), childNode);
    }
}

Вот чтоя сделал с другой формой и с помощью Progress-bar и Action.

public partial class frmWaitForm : Form
{
    public Action Worker
    {
        get;
        set;
    }

    public frmWaitForm(Action worker)
    {
        InitializeComponent();

        if (worker == null)
            throw new ArgumentNullException();
        Worker = worker;
    }

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        Task.Factory.StartNew(Worker).ContinueWith(t => { this.Close(); }, 
            TaskScheduler.FromCurrentSynchronizationContext());
    }

    private void frmWaitForm_Load(object sender, EventArgs e)
    {
        this.ControlBox = false;
    }
}

, а затем:

using (frmWaitForm mFrmWaitForm = new frmWaitForm(RetriveDataFromDatabase))
            {
                mFrmWaitForm.ShowDialog(this);
            }

void RetriveDataFromDatabase()
        {
            MySqlConnection conn;
            MySqlCommand cmd;
         ...


        }
...