2

我正在尝试将两个对象(List LedgerEntries 和 List BuyerSellers)绑定到单个 DataGridView。LedgerEntry 包含买方卖方的属性,我希望最终用户从 DataGridView 中的组合框(由买方卖方通用集合填充)中选择买方卖方,并将 LedgerEntries 字符串买方卖方属性设置为买方卖方字符串名称属性。

目前我只使用一个 BindingSource 并且我没有定义我自己的列;它们是根据绑定到 DGV 的对象自动生成的。我有点迷茫的地方是如何确保一个对象中的属性被初始化为由另一个对象填充的组合框的值。提前感谢您的帮助。

4

1 回答 1

0

在这里找到我要找的东西:http: //social.msdn.microsoft.com/Forums/vstudio/en-US/62ddde6c-ed96-4696-a5d4-ef52e32ccbf7/binding-of-datagridviewcomboboxcolumn-when-using-object-捆绑

public partial class Form1 : Form
{
    List<LedgerEntry> ledgerEntries = new List<LedgerEntry>();
    List<Address> addresses = new List<Address>();
    BindingSource entrySource = new BindingSource();
    BindingSource adSource = new BindingSource();

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        entrySource.DataSource = ledgerEntries;
        adSource.DataSource = addresses;

        DataGridViewComboBoxColumn adr = new DataGridViewComboBoxColumn();
        adr.DataPropertyName = "Address";
        adr.DataSource = adSource;
        adr.DisplayMember = "OrganizationName";
        adr.HeaderText = "Organization";
        adr.ValueMember = "Ref";

        ledger.Columns.Add(adr);
        ledger.DataSource = entrySource;

        addresses.Add(new Address("Test1", "1234", 5678));
        addresses.Add(new Address("Test2", "2345", 9876));
    }

    private void button1_Click(object sender, EventArgs e)
    {
        foreach (LedgerEntry le in ledgerEntries)
            MessageBox.Show(le.Address.OrganizationName + " // " + le.Description);
    }
}

public class LedgerEntry
{
    public string Description { get; set; }
    public Address Address { get; set; }
}

public class Address
{
    public string OrganizationName { get; set; }
    public string StreetAddress { get; set; }
    public int ZipCode { get; set; }

    public Address(string orgname, string addr, int zip)
    {
        OrganizationName = orgname;
        StreetAddress = addr;
        ZipCode = zip;
    }

    public Address Ref
    {
        get { return this; }
        set { Ref = value; }
    }

    public override string ToString()
    {
        return this.OrganizationName;
    }
}
于 2013-06-23T19:12:43.633 回答