2012-12-24 55 views
1

我想綁定一個綁定列表到一個數據網格,並將autogeneratecolumns設置爲true。然而,沒有列顯示,我想知道爲什麼。DataGridView與BindingList <Outlook.MailItem>不起作用

代碼片段:

datagridResults.AutoGenerateColumns = true; 
List<MailItem> mailItems = new List<MailItem>(); 

//readPst() returns a List<MailItem> populated with MailItems from the specified PST. 
mailItems = readPst(txtBoxPST.Text, "Archive Folders"); 
BindingList<MailItem> bl = new BindingList<MailItem>(mailItems); 

datagridResults.DataSource = bl; 
datagridResults.Refresh(); 

數據網格最終是空白。我確信BindingList包含MailItems,如果我將它從BindingList中的綁定更改爲bl中的Foreach MailItem m ...手動添加行,它工作正常。所以我最好的猜測是AutoGenerateColumns不適用於MailItem類?我不知道爲什麼,或者最好的解決方法。

MailItem類是Microsoft.Office.Interop.Outlook.MailItem類。

回答

0

只需添加ToList(),不需要刷新DataGridView

datagridResults.DataSource = bl.Tolist();

更新

這是如何閱讀MailItemsOutLook

public static void DisplayInbox(ApplicationClass o) 
{ 
    // Get items in my inbox. 
    NameSpace outlookNS = o.GetNamespace("MAPI"); 
    MAPIFolder inboxFolder 
    = outlookNS.GetDefaultFolder(OlDefaultFolders.olFolderInbox); 
    // Print out some basic info. 
    Console.WriteLine("You have {0} e-mails.", 
    inboxFolder.Items.Count); 
    Console.WriteLine(); 
    foreach(object obj in inboxFolder.Items) 
    { 
    MailItem item = obj as MailItem; 
    if(item != null) 
    { 
     Console.WriteLine("-> Received: {0}", 
     item.ReceivedTime.ToString()); 
     Console.WriteLine("-> Sender: {0}", item.SenderName); 
     Console.WriteLine("-> Subject: {0}", item.Subject); 
     Console.WriteLine(); 
    } 
    } 
} 

來源:An Introduction to Programming Outlook 2003 Using C#

+0

好猜測,但'不需要ToList',它的工作原理沒有它。 –

+0

我試過了,它不起作用。我不認爲我需要刷新,謝謝澄清。 –

+0

@Jeremy Thompson,它的真實:)。到Kiklion,我更新了我的答案。我希望它能幫助你。 – spajce

0

也許它的一個DataGridView屬性你設置。嘗試刪除窗體上的DataGridView,並拖放一個新窗體並僅設置其名稱Property。那就試試這個代碼的工作原理:

public class MailItems 
{ 
    public string name { get; set; } 
    public string address { get; set; } 
} 

List<MailItems> items = new List<MailItems>(); 
public Form1() 
{ 
    InitializeComponent(); 
    items.Add(new MailItems(){address = "1 Some St",name = "Kiklion"}); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    datagridResults.AutoGenerateColumns = true; 
    BindingList<MailItems> gridItems = new BindingList<MailItems>(items); 
    dataGridView1.DataSource = gridItems; 
} 

你的代碼應工作:

datagridResults.AutoGenerateColumns = true; 
BindingList<MailItem> mailItems = new BindingList<MailItems>(readPst(txtBoxPST.Text, "Archive Folders")); 
datagridResults.DataSource = mailItems; 

編輯

它在Microsoft.Office.Interop.Outlook.MailItem使用的BindingList不會工作類。我沒有直接將DataGridView.Datasource綁定到Outlook Interop類,而是建議您將類抽象爲我使用自定義代碼顯示和更新Outlook郵件項目。

+0

我將編輯第一個問題,但確實有效,但我沒有使用自己的MailItems類,而是使用了Microsoft.Office.Interop.Outlook.MailItem類。嘗試使用新的datagridview,而不更改任何選項也無法正常工作。 –

1

更換

BindingList<MailItem> mailItems 

MailItem[] mailItems 

即列表轉換爲數組 ,然後再試一次

相關問題