单击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的时候界面还是处于假死状态,应该怎么样做才能保证界面不是假死呢?
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的时候界面还是处于假死状态,应该怎么样做才能保证界面不是假死呢?
待RunWorkerCompleted再给控件加载数据。
你直接用线程访问控件这种方法是不安去的。这个msdn文档里面有做说明。
所以微软搞了个BackgroundWorker,我觉得这个可以。
你试试看。
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();
}
}