DataTable dt = new DataTable("Info");
delegate void BindDataAsync();
GridView gv = new GridView();
private void btnLoad_Click(object sender, RoutedEventArgs e)
{
BeginBindData();
}
#region Invoke the Binding Data method asynchorously
private void BeginBindData()
{
BindDataAsync bindData = new BindDataAsync(BindData);
IAsyncResult iar = bindData.BeginInvoke(new AsyncCallback(EndBindData), bindData);
tsStatus.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate
{
tsStatus.Content = "正在加载中。。。";
}));
}
private void EndBindData(IAsyncResult iar)
{
tsStatus.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate
{
tsStatus.Content = "加载完毕。。。";
}));
BindDataAsync bindData = (BindDataAsync)iar.AsyncState;
bindData.EndInvoke(iar);
}
private void BindData()
{
GetHeader();
DataTable dt = LoadData();
tsStatus.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate
{
tsStatus.Content = "正在绑定数据,请稍候。。。";
}));
//using Dispatcher to avoid crossing thread exception
listView1.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate
{
foreach (DataColumn item in dt.Columns)
{
GridViewColumn gvc = new GridViewColumn();
gvc.DisplayMemberBinding = new Binding(item.ColumnName);
gvc.Header = item.ColumnName;
gv.Columns.Add(gvc);
}
listView1.View = gv;
listView1.DataContext = dt;
listView1.SetBinding(ListView.ItemsSourceProperty, new Binding()); //must add this , otherwise it will not be showen
}));
}
#endregion
#region Initialize the DataTable
private void GetHeader()
{
DataColumn dc = new DataColumn();
dc.ColumnName = "name";
dt.Columns.Add(dc);
}
private DataTable LoadData()
{
for (int i = 1; i < 10000; i++)
{
DataRow dr = dt.NewRow();
dr[0] = i.ToString();
tsStatus.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate
{
tsStatus.Content = "当前已经加载" + i + "条数据。。。";
}));
dt.Rows.Add(dr);
}
return dt;
}
#endregion