绑定列表<keyvaluepair <decimal,int =“”>&gt;到数据源

时间:2017-05-21 10:50:05

标签: c# winforms

是否可以做这样的事情:

 public List<KeyValuePair<decimal, int>> Amounts
        {
            set
            {
                dataGridViewAmounts.DataSource = value;
                dataGridViewAmounts.Visible = true;
            }
        }

我知道我可以这样做:

public List<Amounts> Amounts
            {
                set
                {
                    dataGridViewAmounts.DataSource = value;
                    dataGridViewAmounts.Visible = true;
                }
            }

但是,如果没有定义金额类型,我就会徘徊。

2 个答案:

答案 0 :(得分:0)

如果您在设计时未指定列定义而绑定List<KeyValuePair<T1,T2>>DataGridView将显示两列,一列为Key,另一列为Value,显示decimal在你的案例中,{s}和int来自Amounts列表。

我假设您只想绑定并显示其中任何一个,而不是两者。您可以通过定义一个列来实现,在设计模式下说Column1(在属性窗口中选中Columns collection)。然后这样做:

dataGridViewAmounts.AutoGenerateColumns = false;
dataGridViewAmounts.DataSource = Amounts;
dataGridViewAmounts.Columns["Column1"].DataPropertyName = "Value"; // Or "Key"

<强>更新

请参阅下面的示例代码:

private void DataGridViewWithKVPairList_Load(object sender, EventArgs e)
{
    var data = GetData();
    dataGridView1.AutoGenerateColumns = false;
    dataGridView1.DataSource = data;
    dataGridView1.Columns["Column1"].DataPropertyName = "Value";
}

private List<KeyValuePair<decimal, int>> GetData()
{
    return new List<KeyValuePair<decimal, int>>
    {
        new KeyValuePair<decimal, int>(1.1m, 11),
        new KeyValuePair<decimal, int>(2.1m, 21),
        new KeyValuePair<decimal, int>(3.1m, 31)
    };
}

那应该给你:

enter image description here

如果您没有在设计时定义列,并且只执行此dataGridViewAmounts.DataSource = Amounts;,那么您应该这样做:

enter image description here

答案 1 :(得分:-1)

是的,您可以将任何内容绑定到DataGrid.DataSource,因为它的类型为System.Object。当然,在DataBinding中使用它时,请正确使用此对象类型。

您可能会想要将Amounts的值存储在私有变量中,以便在需要时可以在页面的其他位置访问它。