2

Gmail の連絡先を C# デスクトップ フォーム アプリケーションに取り込もうとしています。この目的で Google API を使用しました。ボタンが押されたときに gmail の連絡先をグリッドビューに表示したいと考えています。しかし、ボタンが押されても、グリッド ビューには何も表示されません。

コードは以下に貼り付けます。

私に知らせて、この問題を解決するのを手伝ってください。

public class MyClass
{
    public int Id { get; set; }
    public string Email { get; set; }
}

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    private void FetchContactList()
    {
        // Define string of list
        List<string> lstContacts = new List<string>();

        // Below requestsetting class take 3 parameters applicationname, gmail username, gmail password. Provide appropriate Gmail account details
        RequestSettings rsLoginInfo = new RequestSettings("", "suryabg2000@gmail.com", "XXXXXX");
        rsLoginInfo.AutoPaging = true;
        ContactsRequest cRequest = new ContactsRequest(rsLoginInfo);

        // fetch contacts list
        Feed<Contact> feedContacts = cRequest.GetContacts();

        // looping the feedcontact entries
        try
        {
            foreach (Contact gmailAddresses in feedContacts.Entries)
            {
                // Looping to read email addresses
                foreach (EMail emailId in gmailAddresses.Emails)
                {
                    lstContacts.Add(emailId.Address);
                }
            }
            // finally binding the list to gridview defined in above step

           // dataGridView1.DataSource = lstContacts;
           ////dataGridView1.DataBind();
           ////dataGridView1.DataSource = dataGridView1;
           // dataGridView1.Show();
        }
        catch (Exception)
        {
            MessageBox.Show("Error Please enter the correct credentials","Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
            //throw;
        }

    }

    private void button1_Click(object sender, EventArgs e)
    {
        List<MyClass> lstContacts = new List<MyClass>();
        //lstContacts.Add(new MyClass() { Id = 1, Email = "def@gmail.com" });
        //lstContacts.Add(new MyClass() { Id = 2, Email = "def@gmail.com" });
        //lstContacts.Add(new MyClass() { Id = 3, Email = "ghi@gmail.com" });

        dataGridView1.DataSource = new BindingSource(lstContacts, null);
        dataGridView1.Show();

    }

}
4

2 に答える 2

1
public class MyClass
{
    public int Id { get; set; }
    public string Email { get; set; }
}
private void button1_Click(object sender, EventArgs e)
{
    List<MyClass> lstContacts = new List<MyClass>();
    //need to add items to list
    lstContacts.Add(new MyClass() { Id = 1, Email = "def@gmail.com" }); 
    lstContacts.Add(new MyClass() { Id = 2, Email = "def@gmail.com" });
    lstContacts.Add(new MyClass() { Id = 3, Email = "ghi@gmail.com" });

    dataGridView1.DataSource = lstContacts;
    dataGridView1.Show();

 }

最初にコードをステップ実行することをお勧めします。これにより、グリッド ビューの空の結果の正確な原因をよりよく理解できるはずです。Google Contacts API の呼び出しまたは gridview コントロールへのデータのバインドに問題がある可能性があります。

しかし、クリック イベント ハンドラーを見るだけで、lstContacts.Add 行をコメント アウトした理由を尋ねずにはいられません。リストlstContactsはまだ空ですよね?

また、dataGridView1.DataSource = lstContacts代わりにデータバインディングに使用します。

編集:コードは確かにうまくいきました。ここでは 3 行が表示されました。

例:

ラッパー クラスを使用する

public class StringValue
{
    public StringValue(string s)
    {
        _value = s;
    }
    public string Value { get { return _value; } set { _value = value; } }
    string _value;
}
List<StringValue> lstContacts = new List<StringValue>();
lstContacts.Add("your email address");
dataGridView1.DataSource = lstContacts;
dataGridView1.Show();

DataTable を使用する

DataTable dt = new DataTable();
dt.Columns.Add("Email Address");

dt.Rows.Add(new object[] { "def@gmail.com" });
dt.Rows.Add(new object[] { "def@gmail.com" });
dt.Rows.Add(new object[] { "def@gmail.com" });
dataGridView1.DataSource = dt;
dataGridView1.Show();
于 2013-06-02T14:12:01.227 に答える
1

以下のコードを使用して、gmail の連絡先を C# デスクトップ アプリケーションに取得しました。目的のためにGOOGLE APIを使用しました!!! データセットを使用した正しく機能するコードを以下に貼り付けます。

public class MyClass
{
    public int Id { get; set; }
    public string Email { get; set; }
}

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    private void fetchContactList()
    {
        // Define string of list
        List<string> lstContacts = new List<string>();



        // Below requestsetting class take 3 parameters applicationname, gmail username, gmail password. Provide appropriate Gmail account details
        RequestSettings rsLoginInfo = new RequestSettings("", textBox1.Text, textBox2.Text);
        rsLoginInfo.AutoPaging = true;
        ContactsRequest cRequest = new ContactsRequest(rsLoginInfo);

        // fetch contacts list
        Feed<Contact> feedContacts = cRequest.GetContacts();


        //dataGridView1.ColumnCount = 1;
        //dataGridView1.Columns[0].Name = "Product ID";



        // looping the feedcontact entries
        try
        {
           // dataGridView1.Columns.Add("Name", "Name");
            RichTextBox rtb = new RichTextBox();
            string email = "";
            DataTable dt = new DataTable();
            dt.Columns.Add("Email Address");
            foreach (Contact gmailAddresses in feedContacts.Entries)
            {
                // Looping to read email addresses
                foreach (EMail emailId in gmailAddresses.Emails)
                {
                   dt.Rows.Add(new object[] {email=emailId.Address});
                   dataGridView1.DataSource = dt;  
                }

                dataGridView1.Show();
            }

        }
        catch (Exception)
        {
            MessageBox.Show("Error Please enter the correct credentials","Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
            //throw;
        }

    }

    private void button1_Click(object sender, EventArgs e)
    {

        fetchContactList();

    }

}

}

于 2013-06-13T09:18:38.923 に答える