在GridView中显示类对象

时间:2013-07-31 06:35:34

标签: c# winforms visual-studio-2010

我有这样的情况,我正在读取txt文件在行上进行一些操作,最后我想在gridview中显示所有内容。我有3个独立的列。在第一个和第二个中,我显示正常的字符串值。但是在中间我有一个类返回的对象,我想在我的gridview中正常显示它。我怎样才能实现它?到目前为止,我有类似的东西。

while ((line = sr.ReadLine()) != null)
{
    string[] lines = line.Split(",".ToCharArray());
    object returnValue;

    MyColumns object = new MyColumns();
    object.Time = line[0];
    object.System_Description = line[1];
    object.User_Description = line[2];

    ///earlier in my code I have object of class called method
    returnValue = method.MyMethod(mc.System_Description);

    Class main = new Class();
    main.Data1= object.Time;
    main.ProblemData= returnValue;
    main.Data2= object.User_Description;
    list3.Add(main);
}

this.dataGridView3.DataSource = list3;

我在显示ProblemData时遇到问题。现在,在此列中,gridview显示“project_name.Class_Name”(此值被撤回的类的名称)

编辑: 好的,我还要提到这个类,returnValue从中获取值有5个属性,比如分类,名称,Second_Name,状态和值。这个returnValue用它们的当前值保存所有这5个属性。

EDIT2:也许有人知道如何在一列中显示所有这些字段?我如何才能加入它们才能显示目的?当我创建普通List并插入此returnValue时,它会创建这5列并在其中插入值。也许它会让人们更容易理解。

3 个答案:

答案 0 :(得分:1)

请查看我对您问题的第一条评论。

您必须在第二列中使用嵌套的GridView,它将绑定到returnValue。这是因为GridView无法自动级联对象数据源。内部绑定需要在主GridView的RowDataBound事件中完成。为此,您必须重新组织/重新计算代码。

或者,如果returnValue的字符串表示可以适用于您的方案,则可以连接DataGridView的属性。

修改

OP询问 WinForms CellFormatting(不是ASP.Net):

WinForms DataGridView不支持开箱即用的嵌套。但是,有一些复杂的模板解决方法。您正在寻找一个简单的解决方案。我找到了一个可以满足你眼前需求的东西。

进入if (e.value is YOUR_OBJECT_TYPE) { e.Value = (e.Value as YOUR_OBJECT_TYPE).YOUR_PROPERTY_NAME; } 事件。

returnValue

详情请参阅:Binding to Nested Properties

替代选项:

main.ProblemData = "Cat: " + returnValue.Category + ", Name: " + returnValue.Name; 的属性连接为字符串的备用选项也可以。

{{1}}

答案 1 :(得分:0)

您应该已经将类变量定义为属性,因为您在数据绑定中使用它们。喜欢这个..

public String Data1 {get;set;}

还会使您的列表成为ObservableCollection,因为只要您更改列表中的内容,它就会通知视图。

答案 2 :(得分:0)

两个选项

覆盖ProblemData类型

中的ToString()方法
public class ProblemData
{
    //whatever...
    public override string ToString()
    {
        return string.format("{0}", this.SomeObject); //set proper display
    }
}

public class YourClass()
{
    //...
    public ProblemData ProblemData{ get; set;}
}

或者,如果可以使用string.Format

格式化对象类型,则可以设置网格列格式化程序
dataGridView3.Columns["ProblemData"].DefaultCellStyle.Format = "N"; 
//display string.Format({0:N}