我正在尝试将绑定列表绑定到datagrid,并将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更改为bl中的Foreach MailItem m ...手动添加行可以正常工作。所以我最好的猜测是AutoGenerateColumns不能与MailItem类一起使用?我不知道为什么,或者解决它的最佳方法。
MailItem类是Microsoft.Office.Interop.Outlook.MailItem类。
答案 0 :(得分:1)
替换
BindingList<MailItem> mailItems
到
MailItem[] mailItems
即将列表转换为数组 然后再试一次
答案 1 :(得分:0)
只需添加 ToList()
,无需刷新DataGridView
datagridResults.DataSource = bl.Tolist();
<强>更新强>
这是阅读MailItems
OutLook
的方法
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();
}
}
}
答案 2 :(得分:0)
也许是你设置的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.Datasource直接绑定到Outlook Interop类,而是建议您按照我显示的方式抽象类,并使用自定义代码更新Outlook邮件项。