1 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊
正如評(píng)論中所述,將BindingList(或 DataTable)與BindingSource關(guān)聯(lián)起來(lái)可以帶來(lái)一些有趣的好處。
當(dāng)修改其中一個(gè)元素BindingList
或?qū)⑿略靥砑拥搅斜碇袝r(shí),所有綁定控件都會(huì)自動(dòng)更新。
您可以使用MovePrevious()
、MoveNext()
、MoveFirst()
、MoveLast()
方法來(lái)導(dǎo)航 中的元素BindingList
(還可以使用其他有用的方法和事件,請(qǐng)參閱有關(guān) BindingSource 功能的文檔)。
這里,a?BindingList<T>
(其中T
是Member
下面所示的類)被設(shè)置為BindingSource的DataSource。兩者都是Form類的Fields,可以根據(jù)需要修改。
然后將 BindingSource 用作 ListBox 的 DataSource。
Text
然后,使用 BindingSource 將兩個(gè) TextBox 控件的屬性綁定到該類的屬性之一Member
。這樣,Text 屬性就設(shè)置為 BindingList 的當(dāng)前 Item。所有控件都是同步的:
txtMemberName.DataBindings.Add(new?Binding("Text",?membersSource,? ????"FirstName",?false,?DataSourceUpdateMode.OnPropertyChanged)); txtMemberLastName.DataBindings.Add(new?Binding("Text",?membersSource,? ????"LastName",?false,?DataSourceUpdateMode.OnPropertyChanged));
在實(shí)踐中,它是這樣工作的:
https://i.stack.imgur.com/sIlxa.gif
請(qǐng)注意,當(dāng)修改 TextBox 的 Text 時(shí),ListBox 的當(dāng)前 Item 會(huì)實(shí)時(shí)更新。
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();
? ? ? ? }
? ? }
}
新會(huì)員表格樣本:
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);
? ? }
}
會(huì)員類別示例:
[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 關(guān)注
- 126 瀏覽
添加回答
舉報(bào)