![](/img/trans.png)
[英]Is it possible to hide properties of a class by default, e.g. in a DataGridView?
[英]Hide certain properties of a class in DataGridView
我知道以前曾問過類似的問題,但我的卻有些不同。 我嘗試了以前建議的大多數解決方案,但沒有一個起作用。
所以問題是我有兩個類,如下所示:
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中顯示的人員列表<Person>的列表 。 問題是當我顯示它們時,我得到類似
但是我需要的是:
我設法解決此問題的唯一方法是在To_String方法中僅返回Dog名稱,但這對我不起作用,因為我需要同時返回名稱和dog age。
希望您能理解我並能幫助我。
我對當前建議(甚至被否決)的答案感到驚訝,該答案建議創建另一個列表只是為了更改值的顯示形式。
您要問的是所謂的格式設置 ,每個UI框架/組件都支持該格式 。 有關更多詳細信息,請參閱我在運行時更改gridview中的單元格值的答案。
您所需要做的就是處理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; }
}
}
結果:
您可以使用LINQ的Select函數:
this.datagridview.DataSource=youList.Select(x=>new {x.First_Name,x.Last_Name,Dog=x.Dog.Name}).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.