2010-10-13 96 views
3

我有喜欢如何将数据添加到DataGridView的

X={ID="1", Name="XX", 
    ID="2", Name="YY" }; 

一个结构是如何将这些数据转储到两个DataGridView一列

在GridView就像

ID | Name

我们可以使用LINQ来做到这一点。我是新来DataGridView Pleaese帮我做这个..提前

+2

webforms?的WinForms? WPF? Silverlight的? – 2010-10-13 11:27:19

回答

15

感谢您首先需要2列添加到数据网格。你可以在设计时做到这一点。请参阅Columns属性。 然后根据需要添加行数。

this.dataGridView1.Rows.Add("1", "XX"); 
+0

我在设计时添加了两列。现在我需要显示的数据在'网格视图' – 2010-10-13 11:31:51

+0

谢谢...我需要遍历结构。所以我必须使用'for'或'foreach'循环。我们可以用'LAMBDA'表达这个吗? – 2010-10-13 11:38:35

+0

是的。有很多选择。我想你可以使用数据绑定作为最好的 – Arseny 2010-10-13 12:38:15

0

LINQ是“查询”语言(那的Q),因此修改数据是它的范围之外。

也就是说,你的DataGridView大概是绑定到ItemsSource,也许类型ObservableCollection<T>或类似。在这种情况下,只需执行如X.ToList().ForEach(yourGridSource.Add)(这可能需要根据网格中源的类型进行调整)。

0

您务必做好像这种形式的代码

DataGridView.DataSource = yourlist;

DataGridView.DataBind();

2

我最喜欢的方式做,这是所谓的“地图”的扩展功能:

public static void Map<T>(this IEnumerable<T> source, Action<T> func) 
{ 
    foreach (T i in source) 
     func(i); 
} 

然后你就可以添加像这样的所有行:

X.Map(item => this.dataGridView1.Rows.Add(item.ID, item.Name)); 
3

让我们假设你有一个类像这样:

public class Staff 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 

而且假设你已经拖放一个DataGridView到您的表单,并将其命名为数据GridView1。

您需要一个BindingSource来保存您的数据以绑定您的DataGridView。这是你如何做到的:

private void frmDGV_Load(object sender, EventArgs e) 
{ 
    //dummy data 
    List<Staff> lstStaff = new List<Staff>(); 
    lstStaff.Add(new Staff() 
    { 
     ID = 1, 
     Name = "XX" 
    }); 
    lstStaff.Add(new Staff() 
    { 
     ID = 2, 
     Name = "YY" 
    }); 

    //use binding source to hold dummy data 
    BindingSource binding = new BindingSource(); 
    binding.DataSource = lstStaff; 

    //bind datagridview to binding source 
    dataGridView1.DataSource = binding; 
} 
+0

你不需要一个绑定源。您可以直接将列表分配给网格数据源。 – 2010-10-17 07:19:46

+0

是的,我们不需要绑定源,我们可以直接将列表绑定到网格的数据源。使用绑定源的优点是,如果列表已更改/更新,我们可以稍后刷新绑定源。网格也会得到刷新。 – bla 2010-10-17 07:37:54

相关问题