我有一个数据字典,如下所示:
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();
答案 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;
<强>输出继电器强>
答案 2 :(得分:0)
简单,你不需要额外的编码。 就这样做
<强> Grd.DataSource = NULL; 强>
Grd.DataSource = DictionaryObject.Values.ToList();
多数民众赞成