0

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

Key  Value

1    ron k polito
2    Ryan s Winslate    

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

3 回答 3

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;
    }

除了 List,您还可以使用 ObservableCollection 或 BindingList

于 2012-05-22T23:45:19.993 回答
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;

输出

在此处输入图像描述

于 2012-05-23T00:14:29.800 回答
0

它很简单,您不需要任何额外的编码。就这样做

Grd.DataSource=null;

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

就是这样

于 2014-02-19T05:46:59.830 回答