DataGridView with BindingList<Outlook.MailItem> doesn&

本文关键字:MailItem gt doesn Outlook lt with BindingList DataGridView | 更新日期: 2023-09-27 17:49:18

我试图将绑定列表绑定到数据网格,autogeneratecolumns设置为true。但是没有列显示,我想知道为什么。

代码片段:

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更改为Foreach MailItem。手动添加行,它工作得很好。所以我最好的猜测是AutoGenerateColumns不能与MailItem类一起工作?我不知道为什么,或者最好的方法来解决它。

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

DataGridView with BindingList<Outlook.MailItem> doesn&

replace

BindingList<MailItem> mailItems

MailItem[] mailItems

。将列表转换为数组再试一次

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

<年代> datagridResults。数据源= bl.Tolist();

这是如何读取OutLook中的MailItems

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

来源:使用c#编程Outlook 2003简介

可能是你设置的DataGridView属性。尝试删除表单上的DataGridView,并拖放一个新的,只设置其名称属性。然后试试下面的代码:

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。我建议您像我所展示的那样抽象这个类,并使用自定义代码更新Outlook邮件项目。