當DataGridView的DataSource是DataTable的時候,DataTable的數據改變時,DataGridView的數據會隨之改變,無需從新綁定到DataGridView。 當DataGridView的DataSource是泛型List,當List的數據改變時,則須要先將DataGridView的DataSource設置爲new List<T>(),再將改變後的List<T>賦給DataGridView的DataSource。綁定List時,注意:切莫將DataGridView的DataSource設置爲Null,不然會破壞DataGridView的列結構。this
若是要對綁定在DataGridView中的List<T>進行數據的添加刪除,先要把List<T>轉換成BindingList<T>,再進行綁定:DataGridView.DataSource=new BindingList<T>(new List<T>)。不然的話會產生許多意想不到的錯誤。 如:初始綁定空數據後再添加數據綁定後,卻取不到DataGridView.CurrentCell屬性。component
IList<T> list= new List<T>();server
DataGridView.DataSource=list;//DataGridView的行不能添加刪除it
DataGridView.DataSource=new BindingList<T>(list);//DataGridView的行能夠添加刪除(只有容許添加行、刪除行)io
示例代碼:class
public partial class ucServer : UserControl
{
private List<ServerInfo> serverList;
private BindingList<ServerInfo> dataBindings;泛型public ucServer(List<ServerInfo> serverList)
{
InitializeComponent();
if (serverList == null)
serverList = new List<ServerInfo>();
this.serverList = serverList;
dataBindings = new BindingList<ServerInfo>(this.serverList);
}objectprivate void ucChecker_Load(object sender, EventArgs e)
{
this.dgParams.DataSource = dataBindings;
}foreachprivate void llDownloadUrl_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
MessageBox.Show("請設置下載地址。");
}Listprivate void llHelp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
MessageBox.Show("請設置幫助信息。");
}public bool IsValid()
{
return true;//CheckService.Check(this.component);
}private void btnAdd_Click(object sender, EventArgs e)
{
ServerInfo info = new ServerInfo() { OSType="Windows", Ports="8000-9999"};dataBindings.Add(info);
}private void btnDel_Click(object sender, EventArgs e)
{
//容許刪除多行DataGridViewSelectedRowCollection rows = this.dgParams.SelectedRows;
foreach (DataGridViewRow row in rows)
{
this.dataBindings.RemoveAt(row.Index);
}
}}