2016-04-11 22 views
2

この質問に類似していることは以前に尋ねられましたが、私のところは少し異なります。以前提案されたソリューションのほとんどを試しましたが、どれもうまくいきませんでした。 DataGridViewでクラスの特定のプロパティを非表示にする

だから問題が示すように、私は2つのクラスを持っていることである。また、

public class Dog 
{ 
    public String Name { get; set; } 
    public int Age{ get; set; } 
} 
public class Person 
{ 
    public String First_Name { get; set; } 
    public String Last_Name { get; set; } 
    public Dog dog { get;set;} 
} 

、私は人々のリスト一覧私はDataGridViewの中に表示しています<人>を持っています。 問題は、私はそれらを表示するとき、私は

enter image description here

のようなものを得ることである。しかし、私は必要なのです。私はそれを修正するために管理する唯一の方法は、唯一の犬を返すことである

enter image description here

To_Stringメソッドの名前ですが、私は名前と犬の年齢の両方を返す必要があるため、私のためには機能しません。

あなたが私を理解して助けてくれることを願っています。

+0

なぜドンboを返すToStringBoth()のような新しい関数を作成していないその間、toStringは名前だけを返します。 – Schafwolle

答えて

4

は、私はちょうど値の表示表現を変更するために別のリストを作成することを提案、現在提案(とさえupvoted)の答えによって驚いています。

というフォーマットをと呼びますが、これはすべてのUIフレームワーク/コンポーネントでサポートされています。詳細はchanging the value of a cell in gridview at runtimeへの私の答えを見てください。

必要なのは、CellFormattingイベントを処理することで、ハンドラ内に置く。このような何か:

var dog = e.Value as Dog; 
if (dog != null) 
{ 
    // Display whatever you like 
    e.Value = dog.Name; 
    e.FormattingApplied = true; 
} 

全サンプル:

using System; 
using System.Windows.Forms; 

namespace Samples 
{ 
    static class Program 
    { 
     [STAThread] 
     static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      var form = new Form(); 
      var dg = new DataGridView { Dock = DockStyle.Fill, Parent = form }; 
      dg.CellFormatting += (sender, e) => 
      { 
       var dog = e.Value as Dog; 
       if (dog != null) { e.Value = dog.Name; e.FormattingApplied = true; } 
      }; 
      dg.DataSource = new[] 
      { 
       new Person { First_Name = "Ben", Last_Name = "Harison", dog = new Dog { Name = "Billy", Age = 50} }, 
       new Person { First_Name = "Rob", Last_Name = "Jonson", dog = new Dog { Name = "Puppy", Age = 25} }, 
      }; 
      Application.Run(form); 
     } 
    } 

    public class Dog 
    { 
     public String Name { get; set; } 
     public int Age { get; set; } 
    } 
    public class Person 
    { 
     public String First_Name { get; set; } 
     public String Last_Name { get; set; } 
     public Dog dog { get; set; } 
    } 
} 

結果:

enter image description here

+0

ありがとうございました。私は両方の答えを見て、正直言って最初に私はupvotesのために他のものを試してみるつもりでしたが、私はあなたが私が間違っていることが分かっていることを示唆した方法を見ました。もう一度、ありがとうございましたか、Благодарятиと言ってもいいですよ! –

+0

あなたは歓迎です(колега:) –

0

あなたは、LINQから選択機能を使用することができます。

this.datagridview.DataSource=youList.Select(x=>new {x.First_Name,x.Last_Name,Dog=x.Dog.Name}).ToList(); 
関連する問題