1 回答

TA貢獻1827條經驗 獲得超4個贊
正如評論中所述,將BindingList(或 DataTable)與BindingSource關聯起來可以帶來一些有趣的好處。
當修改其中一個元素BindingList
或將新元素添加到列表中時,所有綁定控件都會自動更新。
您可以使用MovePrevious()
、MoveNext()
、MoveFirst()
、MoveLast()
方法來導航 中的元素BindingList
(還可以使用其他有用的方法和事件,請參閱有關 BindingSource 功能的文檔)。
這里,a?BindingList<T>
(其中T
是Member
下面所示的類)被設置為BindingSource的DataSource。兩者都是Form類的Fields,可以根據需要修改。
然后將 BindingSource 用作 ListBox 的 DataSource。
Text
然后,使用 BindingSource 將兩個 TextBox 控件的屬性綁定到該類的屬性之一Member
。這樣,Text 屬性就設置為 BindingList 的當前 Item。所有控件都是同步的:
txtMemberName.DataBindings.Add(new?Binding("Text",?membersSource,? ????"FirstName",?false,?DataSourceUpdateMode.OnPropertyChanged)); txtMemberLastName.DataBindings.Add(new?Binding("Text",?membersSource,? ????"LastName",?false,?DataSourceUpdateMode.OnPropertyChanged));
在實踐中,它是這樣工作的:
https://i.stack.imgur.com/sIlxa.gif
請注意,當修改 TextBox 的 Text 時,ListBox 的當前 Item 會實時更新。
BindingList<Member> members = null;
BindingSource membersSource = null;
public partial class frmMembers : Form
{
? ? public frmMembers() {
? ? ? ? InitializeComponent();
? ? ? ? InitializeDataBinding();
? ? }
? ? private void InitializeDataBinding()
? ? {
? ? ? ? members = new BindingList<Member>();
? ? ? ? membersSource = new BindingSource(members, null);
? ? ? ? lstBoxMembers.DataSource = membersSource;
? ? ? ? txtMemberName.DataBindings.Add(new Binding("Text", membersSource,?
? ? ? ? ? ? "FirstName", false, DataSourceUpdateMode.OnPropertyChanged));
? ? ? ? txtMemberLastName.DataBindings.Add(new Binding("Text", membersSource,?
? ? ? ? ? ? "LastName", false, DataSourceUpdateMode.OnPropertyChanged));
? ? }
? ? private void btnAddMember_Click(object sender, EventArgs e)
? ? {
? ? ? ? var frmNew = new frmNewMember();
? ? ? ? if (frmNew.ShowDialog() == DialogResult.OK && frmNew.newMember != null) {
? ? ? ? ? ? members.Add(frmNew.newMember);
? ? ? ? }
? ? }
? ? private void btnMovePrevious_Click(object sender, EventArgs e)
? ? {
? ? ? ? if (membersSource.Position > 0) {
? ? ? ? ? ? membersSource.MovePrevious();
? ? ? ? }
? ? ? ? else {
? ? ? ? ? ? membersSource.MoveLast();
? ? ? ? }
? ? }
? ? private void btnMoveNext_Click(object sender, EventArgs e)
? ? {
? ? ? ? if (membersSource.Position == membersSource.List.Count - 1) {
? ? ? ? ? ? membersSource.MoveFirst();
? ? ? ? }
? ? ? ? else {
? ? ? ? ? ? membersSource.MoveNext();
? ? ? ? }
? ? }
}
新會員表格樣本:
public partial class frmNewMember : Form
{
? ? public Member newMember;
? ? private void btnSave_Click(object sender, EventArgs e)
? ? {
? ? ? ? if (string.IsNullOrEmpty(txtMemberName.Text) ||?
? ? ? ? ? ? string.IsNullOrEmpty(txtMemberLastName.Text)) return;
? ? ? ? newMember = new Member(txtMemberName.Text, txtMemberLastName.Text);
? ? }
}
會員類別示例:
[Serializable()]
public class Member
{
? ? public Member() { }
? ? public Member(string firstName, string lastName)
? ? {
? ? ? ? this.FirstName = firstName;
? ? ? ? this.LastName = lastName;
? ? }
? ? public string FirstName { get; set; }
? ? public string LastName { get; set; }
? ? public override string ToString() => $"{this.FirstName} {this.LastName}";
}
- 1 回答
- 0 關注
- 129 瀏覽
添加回答
舉報