是否可以做这样的事情:
public List<KeyValuePair<decimal, int>> Amounts
{
set
{
dataGridViewAmounts.DataSource = value;
dataGridViewAmounts.Visible = true;
}
}
我知道我可以这样做:
public List<Amounts> Amounts
{
set
{
dataGridViewAmounts.DataSource = value;
dataGridViewAmounts.Visible = true;
}
}
但是,如果没有定义金额类型,我就会徘徊。
答案 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)
};
}
那应该给你:
如果您没有在设计时定义列,并且只执行此dataGridViewAmounts.DataSource = Amounts;
,那么您应该这样做:
答案 1 :(得分:-1)
是的,您可以将任何内容绑定到DataGrid.DataSource
,因为它的类型为System.Object
。当然,在DataBinding中使用它时,请正确使用此对象类型。
您可能会想要将Amounts
的值存储在私有变量中,以便在需要时可以在页面的其他位置访问它。