Мне нужно создать простую панель 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;
...
}