2016-04-11 41 views
2

'daki bir sınıfın belirli özelliklerini gizleme Bu sorunun daha önce sorulmuş olduğunu biliyorum, ancak benimki biraz daha farklı. Önceden önerilen çözümlerin çoğunu denedim, ancak bunların hiçbiri işe yaramıyor. DataGridView

Yani sorun gösterildiği gibi İki sınıf var olmasıdır: Ayrıca

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;} 
} 

, ben İnsanlar listesini Liste ben DataGridView görüntüleme am < Kişi> var. Bunu düzeltmek için yönetilen

enter image description here

tek yolu sadece Köpek dönen gereğidir: sorun onları görüntülemek zaman

enter image description here

gibi bir şey olsun Ama ne ihtiyacım olduğunu To_String yönteminde ad, ancak benim için çalışmıyor çünkü adın ve köpek yaşının her ikisini de döndürmem gerekiyor.

Umarım beni anlarsınız ve bana yardımcı olabilirsiniz.

+0

Neden Don

Tüm ihtiyacınız CellFormatting olayı işlemek ve bunun gibi işleyici içten bir şeyi koymaktır Bo döndüren ToStringBoth() gibi yeni bir işlev oluşturmuyorsunuz toString sadece Adı döndürürken? – Schafwolle

cevap

4

Ben sadece bir değerin ekran gösterimini değiştirmek için başka bir liste oluşturarak önerir anda önerilen (ve hatta upvoted) cevap şaşırttı.

Ne soruyorsunuz biçimlendirmesi biçimlendiriliyor ve her UI çerçeve/bileşeni tarafından destekleniyor. Daha fazla bilgi için cevabımı changing the value of a cell in gridview at runtime'a bakın.

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

Tam örnek:

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; } 
    } 
} 

Sonuç:

enter image description here

+0

Yardım için çok teşekkür ederim. Her iki cevabı da gördüm ve dürüst olmak gerekirse, öncelikle, öte yanda olduğu için, diğerini denemeye çalışacağım, ama önerdiğin yolu gördüğümde, diğerinin ne kadar yanlış olduğunu anladım. Yine teşekkür ederim ya da Благодаря ти söylemek daha iyidir! –

+0

Rica ederim (колега :) –

0

Sen LINQ seçin işlevini kullanabilirsiniz:

this.datagridview.DataSource=youList.Select(x=>new {x.First_Name,x.Last_Name,Dog=x.Dog.Name}).ToList();