单击Button5绑定DataGridView,代码如下:
delegate void MyDeletegate();
string connString = "server=.;uid=sa;pwd=speed;database=Northwind";private void button5_Click(object sender, EventArgs e)
{
    Thread t = new Thread(new ThreadStart(ThreadBind));
    t.Name = "NewThread";
    t.Start();            
}private void ThreadBind()
{
     this.BeginInvoke(new MyDeletegate(BindGrid));            
}private void BindGrid()
{
     SqlConnection sqlconn = new SqlConnection(connString);
     sqlconn.Open();      SqlDataAdapter adp = new SqlDataAdapter("SELECT * FROM Products", sqlconn);
      SqlCommandBuilder sqlcomm = new SqlCommandBuilder(adp);      DataSet ds = new DataSet();
      adp.Fill(ds);
      this.dataGridView1.DataSource = ds.Tables[0];
      sqlconn.Close();
}
现在的问题是绑定DataGridView的时候界面还是处于假死状态,应该怎么样做才能保证界面不是假死呢?

解决方案 »

  1.   

    我觉得你可以使用BackgroundWorker后台线程来做,异步调用数据。
    待RunWorkerCompleted再给控件加载数据。
    你直接用线程访问控件这种方法是不安去的。这个msdn文档里面有做说明。
    所以微软搞了个BackgroundWorker,我觉得这个可以。
    你试试看。
      

  2.   


        public partial class frmUserManger :  BaseForm
        {
            public frmUserManger()
            {
                InitializeComponent();
            }
            Tb_Employee ltb = null;        private BackgroundWorker bg = new BackgroundWorker();        DataTable dtcbo ;
            
            private void frmUserManger_Load(object sender, EventArgs e)
            {
                ltb = new Tb_Employee();
                BindGridView();
               
                bg.DoWork += new DoWorkEventHandler(bg_DoWork);
                bg.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bg_RunWorkerCompleted);
                bg.RunWorkerAsync();
            }        void bg_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                cboType.DataSource = dtcbo;
                cboType.DisplayMember = "Value";
                cboType.ValueMember = "UID";
            }        void bg_DoWork(object sender, DoWorkEventArgs e)
            {
                DataTable dt = new clsStandardCode().GetStandardCodeList("subkind");
                DataTable dt2 = new clsStandardCode().GetStandardCodeList("department");            DataTable dttemp = dt.Copy();
                dttemp.Merge(dt2, true);
                dtcbo = dttemp;
            }        private void BindGridView()
            {
                DataSet lds = GetSeriviceData.User.UserManger.GetUserList();
                gridControl1.DataSource = lds.Tables[0];
                Convert_to_CHN();
            }
            private void Convert_to_CHN()
            {            EditZHCN myeditLocalizer = new EditZHCN();
                GridZHCN mygridLocalizer = new GridZHCN();
                DevExpress.XtraEditors.Controls.Localizer.Active = myeditLocalizer;
                DevExpress.XtraGrid.Localization.GridLocalizer.Active = mygridLocalizer;
            }
            protected override bool SaveMod()
            {
                ltb.Uid = int.Parse(lblID.Text.Trim());
                ltb.ChnName = txtcnname.Text.Trim();
                ltb.EngName = txtengname.Text.Trim();
                ltb.StationUid = int.Parse(cboType.SelectedValue.ToString());
                 Employee ep =new Employee(ltb);
                 ep.Updte();
                 BindGridView();
                 return true;
                 
            }        protected override bool SaveNew()
            {
                ltb.ChnName = txtcnname.Text.Trim();
                ltb.EngName = txtengname.Text.Trim();
                ltb.StationUid = int.Parse(cboType.SelectedValue.ToString());            Employee ep = new Employee(ltb);
                ep.Updte();
                BindGridView();
                return true;
            }
            protected override bool Del()
            {
                ltb.Uid = int.Parse(lblID.Text);
                Employee ep = new Employee(ltb);
                ep.Delete();
                BindGridView();
                return true;
            }             private void gridView1_Click(object sender, EventArgs e)
            {
                DataRow dr = gridView1.GetDataRow(gridView1.FocusedRowHandle);
                lblID.Text = dr["UID"].ToString();
                txtcnname.Text = dr["chnname"].ToString();
                txtengname.Text = dr["engname"].ToString();
                cboType.SelectedText = dr["stationname"].ToString();
            }
           
        }