簡體   English   中英

在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM