5

2 つのオブジェクト、つまりFruit' andColor` があり、それらの定義は次のとおりです。

public class Fruit  
{  
  public int FruitId { get; set; }  
  public string Name { get; set; }  
  public Color Color { get; set; }  
}  

public class Color  
{  
  public int ColorId { get; set; }  
  public string Name { get; set; }  
}  

Fruit (e.g. List<Fruit>)コレクションをDataGridViewにバインドするにはどうすればよいですか? 結果の出力は次のようになります。

+-----+--------+----------+  
| Id  | Name   | Color    |  
+-----+--------+----------+  
| 10  | Apple  | Red      |  
| 20  | Orange | Orange   |  
| 30  | Grapes | Violet   |  
+-----+--------+----------+  

以下の出力とは異なります: (注: の NN.Colorはオブジェクト Color の名前空間を示します)

+-----+--------+------------+  
| Id  | Name   | Color      |  
+-----+--------+------------+  
| 10  | Apple  | N.Color    |  
| 20  | Orange | N.Color    |  
| 30  | Grapes | N.Color    |  
+-----+--------+------------+  

更新#1: SOで
同様の投稿を見つけ、その投稿でいくつかの提案を試みましたが、機能していません...

4

3 に答える 3

6

複数のオプションがあります。

ToStringクラスのメソッドをオーバーライドして、次のようColorに返すことができます。Name

public class Color
{
    public int ColorId { get; set; }
    public string Name { get; set; }
    public override string ToString()
    {
        return Name;
    }
}  

List<Fruit>または、 asを割り当てる代わりにDataSource、匿名オブジェクトのリストを選択しNameて、次のColorように結果を選択できます。

var result = yourListOfFruit
                .Select(r => new
                        {
                            FruitID = r.FruitId, 
                            Name = r.Name, 
                            Color = r.Color.Name,
                        }).ToList();

dataGridView1.DataSource = result;
于 2014-10-21T17:02:22.350 に答える
5

わかりました、アプリを機能させる方法を数日考え出した後、私の問題を解決するのに大いに役立つ記事を見つけることができました. 皆さんのためにここでそれを共有したいと思ったので、始めましょう:

まず、既にフルーツのリストが変数 fruit に格納されており、その値をメソッドから取得済みであると仮定します。

List<Fruit> fruits = method();  

さて、私の問題は...次のコマンドを使用してそのリストをデータグリッドビューにバインドすると:

datagridview.DataSource = fruits;  

次のような結果が得られます。

+-----+--------+------------+  
| Id  | Name   | Color      |  
+-----+--------+------------+  
| 10  | Apple  | N.Color    |  
| 20  | Orange | N.Color    |  
| 30  | Grapes | N.Color    |  
+-----+--------+------------+   

これは私が望むものではありません。したがって、どうにかして各列を手動で datagridview に配置すれば、フルーツ リストから表示するプロパティを指定できるのではないかと考えました。だから私はこのようなことをしました:

DataGridViewColumn col3 = new DataGridViewTextBoxColumn();  
col3.DataPropertyName = "Color.Name";  
col3.HeaderText = "Color Name";  
dataGridView1.Columns.Add(col3);  

ただし、DataGridView 列の DataPropertyName でこのような指定をColor.Name行っても機能せず、DataGridView にデータが表示されない空白の列になるだけです。それが機能するためには、DataGridView に、その特定の列に値を適切に表示するためのセル書式設定機能が必要です。書式設定を行う方法に関する完全なチュートリアルについては、 Antonio Bello のブログ からここで確認できます。

以上です、お役に立てれば幸いです^_^

于 2014-10-23T07:18:35.100 に答える
1

このプロパティを確認できますDataGridView.DataSource プロパティ

        // Automatically generate the DataGridView columns.
        dataGridView1.AutoGenerateColumns = true;

        // Set up the data source.
        bindingSource1.DataSource = GetData("Select * From Products");
于 2014-10-21T16:54:16.423 に答える