CASE----使用Timer控制元件對DataGridView控制元件中的資料進行更新
阿新 • • 發佈:2018-12-22
問題引入
DataGridView控制元件可以將集合中的資料值以表的形式顯示,由於DataGridView是靜態控制元件,從而存在當集合中的資料值發生變化時,DataGridView控制元件不會隨著集合中資料的變化而變化。
解決思想
Timer控制元件是一個執行緒控制元件,在一定時間段內執行指定的操作,DataGridView控制元件可以顯示集合中的資料,可以使用Timer控制元件對DataGridView控制元件中顯示的資料值進行動態的更新。
程式要求
- 程式始終維護一個List集合變數
- List集合中的變數可以在窗中的DataGridView控制元件中顯示
- 使用Timer控制元件達到1S對控制元件中顯示的資料進行更新
技術分析
- 泛性集合的使用
- DataGridView控制元件的使用
- Timer控制元件的使用及執行緒技術
設計介面
實現過程詳述
1、介面設計(只顯示主要控制元件的設計)
2、測試類設計
namespace RefreshingDataByTimer { public class UserInfo { private int iD; private string userName; private string userPwd; public int ID { get { return iD; } set { iD = value; } } public string UserName { get { return userName; } set { userName = value; } } public string UserPwd { get { return userPwd; } set { userPwd = value; } } } }
3、泛性集合
List<UserInfo> list;
public Form1()
{
InitializeComponent();
list = new List<UserInfo>();
InitFrm();
}
4、新增按鈕Click事件
private void btnAdd_Click(object sender, EventArgs e) { if(txtUserName.Text != "") { if(txtUserPwd.Text != "") { UserInfo userInfo = new RefreshingDataByTimer.UserInfo(); userInfo.ID = list.Count; userInfo.UserName = txtUserName.Text; userInfo.UserPwd = txtUserPwd.Text; list.Add(userInfo); MessageBox.Show("新增成功"); dgvShow.DataSource = list; } } }
5、DataGridView控制元件資料來源與集合繫結方法設計
private void InitFrm()
{
dgvShow.DataSource = null;
dgvShow.DataSource = list;
}
6、Timer控制元件的Tick事件
private void timer1_Tick(object sender, EventArgs e)
{
InitFrm();
//dgvShow.Refresh();
}
遇到的問題及解決方法
1、資料項自動繫結失敗
描述:使用public修飾的UserInfo中的欄位,使用DataGridView控制元件的自動填充列的功能時,控制元件中未顯示任何資料值。
public int ID;
public string UserName;
public string UserPwd;
原因:DataGridView控制元件的列名與類中屬性名及其屬性的排列順序一一對應,若在Model類中沒有將欄位封裝未屬性,則不能使用DataGridView控制元件的自動列名填充功能。
修改方案:
private int iD;
private string userName;
private string userPwd;
public int ID
{
get
{
return iD;
}
set
{
iD = value;
}
}
public string UserName
{
get
{
return userName;
}
set
{
userName = value;
}
}
public string UserPwd
{
get
{
return userPwd;
}
set
{
userPwd = value;
}
}
結果顯示:
2、DataGridView控制元件的資料值重新整理一次
使用Refresh()方法進行重新整理,但是顯示的介面沒有更新
查閱資料:
參考博主的解決方案對程式做如下調整:
private void timer1_Tick(object sender, EventArgs e)
{
//InitFrm();
dgvShow.Invoke(new Action(() => dgvShow.Refresh()));
}
(很不幸還是失敗了~_~淚)
另闢蹊徑,手動寫重新整理方法
private void InitFrm()
{
dgvShow.DataSource = null;
dgvShow.DataSource = list;
}
private void timer1_Tick(object sender, EventArgs e)
{
InitFrm();
}
解決控制元件資料重新整理問題。