35

設定ファイルから設定名とそれぞれの値を順序付けられた辞書に抽出しました。ディクショナリには、ICollectionクラスのキーと値が含まれています。そのデータをバインドして、DataGridViewに表示したいと思います。文字列を配列にコピーしてそれらの配列を表示しようとしましたが、プログラムを実行すると、列が空白になり、バインドされていないように見えました。

また、DataGridViewソースを順序付けられたディクショナリコレクション(キーまたは値)の1つに直接設定しようとしましたが、それでも必要な結果は得られませんでした。列はまだ空白でした。ただし、3番目の列は列名を「長さ」として作成され、ICollection内のエントリーの長さを表示します。しかし、言うまでもなく、長さは必要ありません。エントリ自体が必要です。

この質問に使用しているコードは次のとおりです。フォームを読み込むときに、構成ファイルを読み込むと、m_Settingsというプライベートメンバーにすべてのキーと値のペアがあります。次に、リストを作成し、キーと値を別々に追加します。バインディングソースを「data」に設定した後、プログラムを実行すると、追加した両方の列が両方とも空白になります。

    private void Form4_Load(object sender, EventArgs e)
    {
        loadconfigfile(Properties.Settings.Default.Config);
        List<Object> data = new List<Object>();
        data.Add(m_Settings.Keys);
        data.Add(m_Settings.Values);
        bindingSource1.DataSource = data;
        dataGridView1.DataSource = bindingSource1;
        dataGridView1.Refresh();
    }

順序付けられた辞書を取得して、「設定」と「値」というラベルの付いた2つの列にエントリを表示する方法について何かアイデアはありますか?リストはDataGridViewsと互換性のあるデータソースだったと思いますが、今は自分自身を推測し始めています。

どんな助けや指示も大歓迎です!必要に応じて、さらに詳しい情報を提供させていただきます。

ありがとう!

編集

myStructクラスが実装された改訂コードは次のとおりです。

    List<myStruct> list = new List<myStruct>();
    for(int index = 0; index < m_Settings.Count; index++)
    {
        myStruct pair = new myStruct(keys[index], values[index].ToString());
        list.Add(pair);
    }

    public class myStruct
    {
        private string Key { get; set; }
        private string Value { get; set; }

        public myStruct(string key, string value)
        {
            Key = key;
            Value = value;
        }
    }

ただし、バインディングDataDourceをlistに設定すると、DataGridViewに何も表示されず、単に空になります。誰もが理由を知っていますか?

4

3 に答える 3

57

まず、すべてのキーと値を count 回追加している理由がわかりません。Index は使用されません。

私はこの例を試しました:

        var source = new BindingSource();
        List<MyStruct> list = new List<MyStruct> { new MyStruct("fff", "b"),  new MyStruct("c","d") };
        source.DataSource = list;
        grid.DataSource = source;

それはかなりうまく機能し、正しい名前の2つの列が得られます。MyStruct 型は、バインディング メカニズムが使用できるプロパティを公開します。

    class MyStruct
   {
    public string Name { get; set; }
    public string Adres { get; set; }


    public MyStruct(string name, string adress)
    {
        Name = name;
        Adres = adress;
    }
  }

1 つのキーと値を受け取る型を作成して、1 つずつ追加してみてください。お役に立てれば。

于 2011-06-24T20:45:22.887 に答える
7

DataGridView プロパティを設定する

    gridView1.AutoGenerateColumns = true;

そして、バインドしているオブジェクトのリストを確認してください。それらのオブジェクトのプロパティは公開されている必要があります。

于 2014-07-14T10:09:57.267 に答える
2

この Func はあなたを助けるかもしれません。すべてのリストオブジェクトをグリッドビューに追加します

private void show_data()
        {
            BindingSource Source = new BindingSource();

            for (int i = 0; i < CC.Contects.Count; i++)
            {
                Source.Add(CC.Contects.ElementAt(i));
            };


            Data_View.DataSource = Source;

        }

私は単純なデータベースアプリのためにこれを書いています

于 2014-03-20T17:34:19.693 に答える