0

私は次のようなデータディクショナリを持っています:

Key  Value

1    ron k polito
2    Ryan s Winslate    

datagridviewに、firstname、midname、lastnameの3つの異なる列を持つ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;
    }

リストの代わりに、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;

Ouput

ここに画像の説明を入力してください

于 2012-05-23T00:14:29.800 に答える