将对象属性初始化为DataGridView中另一个对象属性的值

时间:2013-06-23 15:59:26

标签: c# datagridview

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

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

1 个答案:

答案 0 :(得分:0)

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

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;
    }
}