2012-05-22 56 views
0

我有一个数据字典,其如下所示:如何将数据字典中的数据映射到datagridview?

Key Value 

1 ron k polito 
2 Ryan s Winslate  

我试图在具有三个不同的列姓名,midname和姓氏一个DataGridView显示值列。下面的语句names.getnames()。ToList()从数据字典中检索名称(值)。

datagridview1.DataSource = names.getnames().ToList(); 

由列表移动到datagridview的创建完全相同相同的行数由数据字典中检索计数的总数的,但它不列入显示任何内容。只出现空行。

我是C#的新手,任何建议我该如何解决这个问题。

谢谢。

下面的代码:

   List<localname> lname_list = new List<localname>(); 
      var l_names = names.getnames().ToList(); 
      foreach(var lcname in l_names) 
      { 
       string[] wrd = lcname.Split(' '); 
       localname lv = new localname(); 
       lv.mylocal(wrd[0], wrd[1], wrd[2]); 
       lname_list.Add(lv); 
      } 
      datagridview1.DataSource = lname_list; 
      ShowDialog(); 
+0

asp.net,的WinForms,WPF,在什么样的? –

+0

什么是getNames? –

+0

getNames检索数据字典中的所有值。 –

回答

1

使用LINQ可以用几行代码做到这一点。

只要你有一个自定义类像

class CustomerName 
{ 
    public string FirstName { get; set;} 
    public string MidName { get; set; } 
    public string LastName { get; set; } 
} 

和你的字典值具有第一。中间,姓氏(意味着该值应该总是有3个部分);你可以这样做。

Dictionary<int, string> dic = new Dictionary<int, string>(); 
dic.Add(1, "ron k polito"); 
dic.Add(2, "Ryan s Winslate"); 

var dicNames = (from a in (dic.Select(b => b.Value).Select(c => c.Split(' ')).AsEnumerable()) select new CustomerName { FirstName = a[0], MidName = a[1], LastName = a[2] }).ToList();    

dataGridView1.DataSource = dicNames; 

输出继电器

enter image description here

+0

我不确定....但我仍然没有收到任何数据。是因为我使用showdialog()? –

+0

为什么你需要ShowDialog()? ShowDialog在那里打开另一个表单作为对话框。例如,如果在Form1中有一个按钮,并且如果要将Form2作为对话框打开,则在Form1_Click事件中,您将调用Form2instance.ShowDialog(); –

+0

你可以把代码放在Form_Load事件下,看看它是否有效。 –

2

您将需要一个指定的POCO将被用来填充DataGrid的列表。在POCO将包含将代表每次want..example列属性:

public class Name 
{ 
    public string First { get; set; } 
    public string Middle { get; set; } 
    public string Last { get; set; } 
} 

内部表单,您将填充基于您的getNames功能列表。

public Form1() 
    { 
     InitializeComponent(); 

     List<Name> namesList = new List<Name>(); 

     dataGridView1.AutoGenerateColumns = false; 
     DataGridViewTextBoxColumn firstNameColumn = new DataGridViewTextBoxColumn(); 
     makeColumn.DataPropertyName = "First"; 
     makeColumn.HeaderText = "First Name"; 

     DataGridViewTextBoxColumn middleNameColumn = new DataGridViewTextBoxColumn(); 
     modelColumn.DataPropertyName = "Middle"; 
     modelColumn.HeaderText = "Middle Name"; 

     DataGridViewTextBoxColumn lastNameColumn = new DataGridViewTextBoxColumn(); 
     yearColumn.DataPropertyName = "Last"; 
     yearColumn.HeaderText = "Last Name"; 

     dataGridView1.Columns.Add(firstNameColumn); 
     dataGridView1.Columns.Add(middleNameColumn); 
     dataGridView1.Columns.Add(lastNameColumn); 

     for (int i = 0; i < names.getNames().Length; i++) 
     { 
      // TODO create new Name object. 
      // TODO set properties in new Name object accordingly. 
      // TODO add name object to namesList once properties have been set. 
     } 

     dataGridView1.DataSource = namesList; 
    } 

而不是列表,你也可以使用一个ObservableCollection,或的BindingList

+0

我试着如上所述,但仍然没有运气......我在datagridview中得到2个空行。但没有数据。 –

+0

你可以发布你的代码吗? –

+0

我已经发布了代码。 –

0

它的简单,你需要什么额外的编码。 正好这样做

Grd.DataSource = null;

Grd.DataSource = DictionaryObject.Values.ToList();

完蛋了