2017-10-11 44 views
1

我試圖將項目從ArrayList稱爲duplicatesDataGridView。但它不顯示來自ArrayListItemArray的數據,這是我想要的,而是顯示元數據。將包含DataRow對象的ArrayList綁定到DataGridView.DataSource

duplicatesArrayList類型:

duplicates = compare.FindDuplicates(existingLeadFilePath, newLeadFilePath); 
gridViewMain.DataSource = duplicates; 

結果

Results I get

Results I require To be displayed

+0

請勿發佈圖片。不是每個人都可以看到它們,這使我們很難幫助你...意味着你不太可能得到一個好的答案。將這些圖像轉換爲文本塊。 –

+0

另外...發佈FindDuplicates()方法將有所幫助。 –

回答

0

您試圖顯示一個ArrayList,其中包含一些DataRow對象,而DataGridView顯示DataRow的屬性。它是預期的。

但可能你已經注意到,當你在DataGridView中顯示DataTable時,控件顯示的是列而不是屬性。

爲什麼?顯示DataTable並顯示DataRow對象列表有什麼區別?

這裏的區別是,DataGridView顯示DataTable這是DataView類型它實現ITypedListDefaultView屬性。因此,它顯示了GetItemProperties返回的內容,實際上是從DataTable詢問的,它是表列的列表。

如何在DataGridView中顯示DataRow對象的列表?

只需將它們添加到具有相同原始表格架構的表格即可。對於examle:

private void Form1_Load(object sender, EventArgs e) 
{ 
    var originalTable = new DataTable(); 
    originalTable.Columns.Add("C1"); 
    originalTable.Columns.Add("C2"); 

    //Original data 
    originalTable.Rows.Add("A", "B"); 
    originalTable.Rows.Add("X", "Y"); 
    originalTable.Rows.Add("A", "B"); 
    originalTable.Rows.Add("X", "Y"); 

    //An ArrayList containing duplicate DataRow objects 
    var duplicates = new System.Collections.ArrayList(); 
    duplicates.Add(originalTable.Rows[2]); 
    duplicates.Add(originalTable.Rows[3]); 

    //Create a Table having the same schema of the original table 
    var duplicatesTable = originalTable.Clone(); 

    //Add copy of duplicates to the duplicate table 
    foreach (DataRow item in duplicates) 
    { 
     duplicatesTable.Rows.Add(item.ItemArray); 
    } 
    this.dataGridView1.DataSource = duplicates; 
} 

注意

你並不需要DataTable工作時使用ArrayList。您有不同的選項,例如使用Clone方法DataTable創建具有相同架構的空DataTable,使用Copy方法創建數據和架構副本,使用AsDataViewAsEnumerableAsEnumerable().CopyToDataTable()等執行一些搜索。

+0

我完全瞭解它,並一直致力於修復錯誤,現在它可以工作。對不起,遲到的答覆和謝謝。 –

+0

太棒了!別客氣 :) –

0

至於我可以看到你想要這些號碼綁定到DataGridView。你正在做的是將一個數組列表綁定到一些對象上,這些對象擁有這個數組作爲成員,這就是datagridview顯示的內容。

儘量不要使用5個項目的數組,而是使用5個成員的類,然後使用這些對象的列表作爲數據源。

擴展的教程可以在這裏找到:http://www.c-sharpcorner.com/article/binding-an-arraylist-with-datagrid-control/

請原諒我的英語不好,我是從我的手機寫。

0

如果將FindDuplicates()方法更改爲返回帶有實型的強類型List<T>,則此問題消失。然後DataGridView具有它可以查看的實際屬性以知道要創建的列。

ArrayLists已死亡。你應該幾乎不會在新代碼中使用它們。即使您合法地無法找到與List<T>一起使用的真實類型,但與ArrayList相比,List<Object>仍然是更好的選擇,因爲它向維護人員傳達基礎對象類型實際上是您想要的,並且它爲您提供了更輕鬆如果您將來能夠獲得更強大的類型(如界面),則可以改變。

相關問題