我有这样的情况,我正在读取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列并在其中插入值。也许它会让人们更容易理解。
答案 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}