c# - 使用 C# (WinForms) 在 DataGridView 中显示 FQL 结果

标签 c# facebook winforms facebook-graph-api facebook-fql

我有我的 FQL 查询和我的访问 token 。但是如何使用 C# 和 ASP.NET 在 GRID VIEW 中显示 FQL 结果?

FQL:

SELECT uid, username, first_name, last_name, friend_count, pic_big  
FROM user 
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) 

这是我尝试过的:

 using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using Facebook;

    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                var fb = new FacebookClient("{My Access Token}");

                dynamic result = fb.Get("/me");
                var name = result.name;

               MessageBox.Show("Hi " + name);
            }
        }
    }

我意识到数据是从 Facebook 作为 JSON 返回的,因此我尝试反序列化,但现在仍然很幸运。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Facebook;
using System.Dynamic;
using Newtonsoft.Json;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }


        public class MyFriends
        {
            public int uid {get; set;}
            public string username {get; set;}
            public string first_name {get; set;}
            public string last_name {get; set;}
            public int friend_count {get; set;}
            public string pic_big {get; set;}
        }


        private void button1_Click(object sender, EventArgs e)
        {
            var fb = new FacebookClient("2A64ZAIeJVIbdZAxXRZCwYf5Bg27OgZDZD");

            var query = string.Format("SELECT uid, username, first_name, last_name, friend_count, pic_big  FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())");

            dynamic parameters = new ExpandoObject();
            parameters.q = query;
            dynamic results = fb.Get("/fql", parameters);

            results = JsonConvert.DeserializeObject<MyFriends>(results);

            //MessageBox.Show("Hi " + results);
        }
    }
}

最佳答案

C# Winforms 解决方案,使用您在标题中指定的 DataGridView 控件。


1) 修改你的 MyFriend,我稍微修改了一下

public class MyFriends
{
    public long uid { get; set; }            
    public string username { get; set; }
    public string first_name { get; set; }
    public string last_name { get; set; }
    public long? friend_count { get; set; }  //nullable
    public string pic_big { get; set; }
}

2) 将 DataGridView 控件添加到表单

3) 使用 JsonConvert 将您的 result.data 反序列化为列表。您还应该传递 result.data.ToString() ,否则会出现异常。

4) 将新列表绑定(bind)DataGridView.Datasource

var fb = new FacebookClient("accessToken");

var query = string.Format(@"SELECT uid, username, first_name, last_name, friend_count, pic_big 
                            FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())");

dynamic parameters = new ExpandoObject();
parameters.q = query;
dynamic results = fb.Get("/fql", parameters);

List<MyFriends> q = JsonConvert.DeserializeObject<List<MyFriends>>(results.data.ToString());

dataGridView1.DataSource = q;

结果: enter image description here

关于c# - 使用 C# (WinForms) 在 DataGridView 中显示 FQL 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20825015/

相关文章:

c# - 如何创建后台线程

facebook - 如何在 facebook api v2.8 中获取页面的页面总数

c# - 使用 Facebook API 编辑帖子返回 OAuthException #100

vb.net - 是否可以让 WebView 控件读取本地 html 文件?

c# - 捕获另一个表单抛出的异常

c# - 使用日期过滤数据 GridView

c# - LINQ GroupBy x 其中有多个 x 并且 y 是唯一的

c#线程异步问题

c# - GetDirectories - 从目录中仅检索几个文件夹

php - 那里有好的多目标 OAuth 框架吗?