0

我有这样的情况,我正在阅读 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:也许有人知道如何在一列中显示所有这些字段?我怎样才能加入他们只是为了展示目的?当我制作普通列表并插入此 returnValue 时,它​​会创建这 5 列并在其中插入值。也许它会更容易理解。

4

3 回答 3

1

请参阅我对您的问题的第一条评论。

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

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

编辑

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

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

挂钩CellFormatting事件。

if (e.value is YOUR_OBJECT_TYPE) {
    e.Value = (e.Value as YOUR_OBJECT_TYPE).YOUR_PROPERTY_NAME; 
}

有关详细信息,请参阅:绑定到嵌套属性

备选方案:

连接 as 字符串的属性的替代选项returnValue也将起作用。

main.ProblemData = "Cat: " + returnValue.Category + ", Name: " + returnValue.Name;
于 2013-07-31T08:59:36.623 回答
0

您应该像属性一样定义类变量,因为您在数据绑定中使用它们。像这样..

public String Data1 {get;set;}

还将您的列表设为 ObservableCollection,因为每当您更改列表中的某些内容时,它都会通知视图。

于 2013-07-31T06:42:37.580 回答
0

两种选择

ToString()在您的 ProblemData 类型中覆盖方法

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}
于 2013-07-31T07:25:38.693 回答