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类。
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邮件项目。