我知道之前曾问过类似这个问题,但我的情况有点不同。我尝试了大多数之前建议的解决方案,但它们都不起作用。
所以问题是我有两个类,如图所示:
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中显示的人> 。 问题是,当我显示它们时,我会得到像
这样的东西但我需要的是:
我设法修复它的唯一方法是在To_String方法中仅返回Dog名称,但它不适合我,因为我需要返回名称和狗年龄。
我希望你能理解我并能帮助我。
答案 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; }
}
}
结果:
答案 1 :(得分:0)
您可以使用LINQ中的Select功能:
HttpPostedFileBase