2012-05-22 106 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();

完蛋了