1

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 mに変更した場合は、手動で行を追加すると正常に機能します。だから私の最も良い推測は、AutoGenerateColumnsがMailItemクラスで機能しないということですか?理由はわかりませんが、それを回避する最善の方法はわかりません。

MailItemクラスは、Microsoft.Office.Interop.Outlook.MailItemクラスです。

4

3 に答える 3

1

交換

BindingList<MailItem> mailItems

MailItem[] mailItems

つまり、リストを配列に変換して再試行します

于 2012-12-24T05:06:45.960 に答える
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();
    }
  }
}

出典:C#を使用したOutlook2003のプログラミング入門

于 2012-12-24T02:47:27.900 に答える
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をOutlookInteropクラスに直接バインドする代わりに、私が示したようにクラスを抽象化し、Outlookメールアイテムをカスタムコードで更新することをお勧めします。

于 2012-12-24T02:52:04.060 に答える