2013-07-31 65 views
0

我有這樣的情況,我正在讀取txt文件,在行上進行一些操作,最後我想在gridview中顯示所有內容。我有3個分開的列。在第一個和第二個我顯示正常的字符串值。但在中間一個我有一個類返回的對象,我想通常在我的GridView中顯示它。我怎樣才能實現它?到目前爲止,我有這樣的事情。在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

什麼是returnValue?它是一個價值還是另一個對象?如果它是一個對象,那麼GridView不能執行級聯。你將不得不使用嵌套的GridViews。 – Abhitalks

+0

returnValue是一個帶有object類型的變量。我想我必須這樣做來處理MyMethod的返回對象。我說得對嗎? – user2592968

+0

該對象的哪個屬性將綁定到GridView列? – Abhitalks

回答

1

請看我對你的問題的第一評論。

您必須在第二列中使用嵌套的GridView,它將綁定到returnValue。這是因爲GridView無法自動級聯對象數據源。內部綁定需要在主GridView的RowDataBound事件中完成。爲了這個工作,你將不得不重新組織/重新考慮你的代碼。

或者,您可以連接returnValue的屬性,前提是它們的字符串表示法可以適用於您的方案。

編輯

的OP是詢問的WinFormsDataGridView(不ASP.Net):

的的WinForms的DataGridView不支持嵌套外的開箱。但是,有一些複雜的模板解決方法。您正在尋找一個簡單的解決方案。我找到了一個可以滿足您的直接需求的產品。

鉤入CellFormatting事件。

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

有關詳細信息,請參閱本:Binding to Nested Properties

備用選項:

串接returnValue作爲字符串的屬性的替代選項,也可以工作。

main.ProblemData = "Cat: " + returnValue.Category + ", Name: " + returnValue.Name; 
+0

好吧,我不知道嵌套的GridView,我將不得不閱讀關於它。爲什麼它不能更簡單的解決方案... – user2592968

+0

如果我不使用asp,我可以製作嵌套的gridview嗎? – user2592968

+0

我的不好!我只是忽略了你正在談論WinForms而不是ASP的事實。 – Abhitalks

0

你應該定義你的類變量,如屬性,因爲你在數據綁定中使用它們。這樣的..

public String Data1 {get;set;} 

也讓你列表中的ObservableCollection因爲每當您更改列表的東西它會通知視圖..

+0

時間不是類型,它是我的類的字段,字符串類型。對不起,我以前沒有提到過。 – user2592968

+0

我已更新..你只需要遵循我想告訴你的概念..你可以探索進一步..數據綁定..的基礎..如果它不工作..下面的評論.. – loop

+0

你可以使財產returnvalue too..like above ..並確保返回值和問題數據類型相同 – loop

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;} 
} 

或者你可以設置網格列格式化程序,如果對象類型可以用字符串格式化。格式

dataGridView3.Columns["ProblemData"].DefaultCellStyle.Format = "N"; 
//display string.Format({0:N}