如何将数据从数据字典映射到datagridview?

时间:2012-05-22 23:26:08

标签: c# winforms

我有一个数据字典,如下所示:

Key  Value

1    ron k polito
2    Ryan s Winslate    

我正在尝试在datagridview中显示Value列,其中包含firstname,midname和lastname三个不同的列。以下语句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();

3 个答案:

答案 0 :(得分:2)

您将需要一个用于填充DataGrid的指定POCO列表。 POCO将包含代表您想要的每个列的属性。例如:

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

代替List

答案 1 :(得分:1)

使用LINQ,您可以使用几行代码完成此操作。

如果您有像

这样的自定义类
class CustomerName
{
   public string FirstName { get; set;}
   public string MidName { get; set; }
   public string LastName { get; set; }
}

并且您的字典值具有第一个。 mid,姓氏(意思是值应该总是有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

答案 2 :(得分:0)

简单,你不需要额外的编码。 就这样做

<强> Grd.DataSource = NULL;

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

多数民众赞成