在DataGridView

时间:2016-04-11 12:44:22

标签: c# winforms class oop 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中显示的人> 。 问题是,当我显示它们时,我会得到像

这样的东西

enter image description here

但我需要的是:

enter image description here

我设法修复它的唯一方法是在To_String方法中仅返回Dog名称,但它不适合我,因为我需要返回名称和狗年龄。

我希望你能理解我并能帮助我。

2 个答案:

答案 0 :(得分:4)

我对目前建议的(甚至是上调的)答案感到惊讶,该答案建议创建另一个列表以更改值的显示表示。

你在问什么叫做格式化,并且每个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

答案 1 :(得分:0)

您可以使用LINQ中的Select功能:

HttpPostedFileBase