C#WinForms DataGridView ComboBox数据绑定

时间:2016-06-07 17:02:35

标签: c# winforms data-binding datagridview

我相信我已经阅读了互联网上关于这个问题的所有文件,而且我仍然遇到麻烦。 我有一个由两个List填充的DataGridView,并组合成一个var

topList = ShippingOrder.GetTopGroups();
topItemsList = ShippingOrder.GetCurrentTopSheet();
topList.AddRange(topItemsList);

var newList = topList.OrderBy(x => x.GroupOrder).ToList();

DdataGridView中的一个列是ComboBox。它来自一个单独的列表

alertList = GetComboBoxValue();

它的值与datagridview combox相关联。

emailRecipientDataGridViewComboBoxColumn.DataSource = alertList;
emailRecipientDataGridViewComboBoxColumn.DataPropertyName = "EmailAlert";
emailRecipientDataGridViewComboBoxColumn.DisplayMember = "PopUpText";
emailRecipientDataGridViewComboBoxColumn.ValueMember = "PopUpValue";

DataPropertyName对应于topList.EmailAlert。

DisplayMember对应于alertList.PopUpText。

ValueMember对应于alertList.PopUpValue。

然后填充数据网格

dgvTopSheet.DataSource = newList;
CurrencyManager cm = (CurrencyManager)(dgvTopSheet.BindingContext[newList]);
cm.Refresh();

填充数据网格后,除了没有显示组合框值外,一切看起来都很好。我可以使用下拉箭头显示从alertList获取的值,但是comboxbox值不会在加载时绑定topList中的值。

据我所知,我在datagridviewcombobox上阅读的50多个文档中,DataPropertName是将控件绑定到dgv中的数据所需的字段。这似乎不起作用,4小时后我有点沮丧。简单的事情似乎很大程度上暗示着我。

感谢任何帮助。

eta -

BusinessObjects类

public class BusinessObjects : INotifyPropertyChanged
{
public BusinessObjects()
    {

    }
    private string popUpText;
    public string PopUpText
    {
        get { return popUpText; }
        set
        {
            popUpText = value;
            OnPropertyChanged(new PropertyChangedEventArgs("PopUpText"));
        }
    }

    private string popUpValue;
    public string PopUpValue
    {
        get { return popUpValue; }
        set
        {
            popUpValue = value;
            OnPropertyChanged(new PropertyChangedEventArgs("PopUpValue"));
        }
    }
}

ShippingOrder Class

public class ShippingOrder : INotifyPropertyChanged
{
private string emailAlert;
    public string EmailAlert
    {
        get { return emailAlert; }
        set
        {
            emailAlert = value;
            OnPropertyChanged(new PropertyChangedEventArgs("EmailAlert"));
        }
    }

    private string partNumber;
    public string PartNumber
    {
        get { return partNumber; }
        set
        {
            partNumber = value;
            OnPropertyChanged(new PropertyChangedEventArgs("PartNumber"));
        }
    }


}

示例数据如下:

ShippingOrder.PartNumber =" 1234Dp01"。

ShippingOrder.EmailAlert =" BSmith@example.com"。

BusinessObject.PopUpText =" Bob Smith"。

BusinessObject.PopUpValue =" BSmith@example.com"。

0 个答案:

没有答案