如何将数据拆分为datagridview

时间:2016-07-26 09:57:39

标签: c# string datagridview web-scraping

我需要将两列中的值拆分为datagridview。 您可以在此处查看我的值的屏幕截图:

enter image description here

我需要将匹配和结果列拆分为每个值都有一列。

这是我的代码:

类别:

    using System;
using System.Collections.Generic;


namespace bexscraping
{
    public class Bet
    {
        public string Match { get; set; }
        public string Result { get; set; }
        public List<string> Odds { get; set; }
        public string Date { get; set; }

        public Bet()
        {
            Odds = new List<string>();
        }

        public override string ToString()
        {
            String MatchInfo = String.Format("{0}: {1} -> {2}", Date, Match, Result);
            String OddsInfo = String.Empty;
            foreach (string d in Odds)
                OddsInfo += " | " + d;

            return MatchInfo + "\n" + OddsInfo;
        }

    }
}

Form1中:

        using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    using HtmlAgilityPack;

    namespace bexscraping
    {
        public partial class Form1 : Form
        {
            private List<Bet> Bets;
            private Bet SelectedBet { get; set; }

            public Form1()
            {
                InitializeComponent();
                dataGridView1.SelectionChanged += DataGridView1_SelectionChanged;
            }

            private void DataGridView1_SelectionChanged(object sender, EventArgs e)
            {
                if (dataGridView1.SelectedRows.Count > 0) {

                    SelectedBet = (Bet)dataGridView1.SelectedRows[0].DataBoundItem;
                    if (SelectedBet.Odds.Count > 0) {

                    textBox1.Text = SelectedBet.Odds[0].ToString();
                    textBox2.Text = SelectedBet.Odds[1].ToString();
                    textBox3.Text = SelectedBet.Odds[2].ToString();
                    }
                }
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                LoadInfo();

                if (Bets.Count > 0)
                {
                    SelectedBet = Bets[0];

                    dataGridView1.DataSource = Bets;
                    if (SelectedBet.Odds.Count > 0)
                    {

                        textBox1.Text = SelectedBet.Odds[0].ToString();
                        textBox2.Text = SelectedBet.Odds[1].ToString();
                        textBox3.Text = SelectedBet.Odds[2].ToString();
                    }
                }
            }

            private void LoadInfo()
            {
                string url = "http://www.betexplorer.com/soccer/australia/northern-nsw/results/";
                HtmlWeb web = new HtmlWeb();
                HtmlAgilityPack.HtmlDocument doc = web.Load(url);

                Bets = new List<Bet>();

                // Lettura delle righe
                var Rows = doc.DocumentNode.SelectNodes("//tr");

                foreach (HtmlNode row in Rows)
                {
                    if (!row.GetAttributeValue("class", "").Contains("rtitle"))
                    {
                        if (string.IsNullOrEmpty(row.InnerText))
                            continue;

                        Bet rowBet = new Bet();
                        foreach (HtmlNode node in row.ChildNodes)
                        {

                            string data_odd = node.GetAttributeValue("data-odd", "");

                            if (string.IsNullOrEmpty(data_odd))
                            {
                                if (node.GetAttributeValue("class", "").Contains(("first-cell")))
                                    rowBet.Match = node.InnerText.Trim();
var matchTeam = rowBet.Match.Split("-", StringSplitOptions.RemoveEmptyEntries);
    rowBet.Home = matchTeam[0];
    rowBet.Host = matchTeam[1];

                                if (node.GetAttributeValue("class", "").Contains(("result")))
                                    rowBet.Result = node.InnerText.Trim();
var matchPoints = rowBet.Result.Split(":", StringSplitOptions.RemoveEmptyEntries);
    rowBet.HomePoints = int.Parse(matchPoints[0];
    rowBet.HostPoints = int.Parse(matchPoints[1];

                                if (node.GetAttributeValue("class", "").Contains(("last-cell")))
                                    rowBet.Date = node.InnerText.Trim();

                            }
                            else
                            {
                                rowBet.Odds.Add(data_odd);
                            }

                        }

                        if (!string.IsNullOrEmpty(rowBet.Match))
                            Bets.Add(rowBet);
                    }

                }

            }


        }


        }

我希望你能帮助我。谢谢!

1 个答案:

答案 0 :(得分:1)

我尝试之后好了,这对我来说是有效的解决方案。 可能是它的不同命名空间,但所有组件都有相同的名称。 Form1类

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using HtmlAgilityPack;

namespace Test
{
    public partial class Form1 : Form
    {
        private List<Bet> Bets;
    public Form1()
    {
        InitializeComponent();
        Form1_Load_1();
        dataGridView1.SelectionChanged += DataGridView1_SelectionChanged;
    }

    private Bet SelectedBet { get; set; }

    private void DataGridView1_SelectionChanged(object sender, EventArgs e)
    {
        if (dataGridView1.SelectedRows.Count > 0)
        {
            SelectedBet = (Bet) dataGridView1.SelectedRows[0].DataBoundItem;
            if (SelectedBet.Odds.Count > 0)
            {
                textBox1.Text = SelectedBet.Odds[0];
                textBox2.Text = SelectedBet.Odds[1];
                textBox3.Text = SelectedBet.Odds[2];
            }
        }
    }

    private void LoadInfo()
    {
        var url = "http://www.betexplorer.com/soccer/australia/northern-nsw/results/";
        var web = new HtmlWeb();
        var doc = web.Load(url);

        Bets = new List<Bet>();

        // Lettura delle righe
        var Rows = doc.DocumentNode.SelectNodes("//tr");

        foreach (var row in Rows)
        {
            if (!row.GetAttributeValue("class", "").Contains("rtitle"))
            {
                if (string.IsNullOrEmpty(row.InnerText))
                    continue;

                var rowBet = new Bet();
                foreach (var node in row.ChildNodes)
                {
                    var data_odd = node.GetAttributeValue("data-odd", "");

                    if (string.IsNullOrEmpty(data_odd))
                    {
                        if (node.GetAttributeValue("class", "").Contains("first-cell"))
                        {
                            rowBet.Match = node.InnerText.Trim();
                            var matchTeam = rowBet.Match.Split(new[] {'-'}, StringSplitOptions.RemoveEmptyEntries);
                            rowBet.Home = matchTeam[0];
                            rowBet.Host = matchTeam[1];
                        }


                        if (node.GetAttributeValue("class", "").Contains("result"))
                        {
                            rowBet.Result = node.InnerText.Trim();
                            var matchPoints = rowBet.Result.Split(new[] {':'}, StringSplitOptions.RemoveEmptyEntries);
                            int help;
                            if (int.TryParse(matchPoints[0], out help))
                            {
                                rowBet.HomePoints = help;
                            }
                            if (matchPoints.Length == 2 && int.TryParse(matchPoints[1], out help))
                            {
                                rowBet.HostPoints = help;
                            }
                        }


                        if (node.GetAttributeValue("class", "").Contains("last-cell"))
                            rowBet.Date = node.InnerText.Trim();
                    }
                    else
                    {
                        rowBet.Odds.Add(data_odd);
                    }
                }

                if (!string.IsNullOrEmpty(rowBet.Match))
                    Bets.Add(rowBet);
            }
        }
    }

    private void Form1_Load_1()
    {
        LoadInfo();

        if (Bets.Count > 0)
        {
            SelectedBet = Bets[0];

            dataGridView1.DataSource = Bets;
            if (SelectedBet.Odds.Count > 0)
            {
                textBox1.Text = SelectedBet.Odds[0];
                textBox2.Text = SelectedBet.Odds[1];
                textBox3.Text = SelectedBet.Odds[2];
            }
        }
    }
}
}

投注课程

using System;
using System.Collections.Generic;

namespace Test
{
    class Bet
    {
        public string Match { get; set; }
        public string Result { get; set; }
        public List<string> Odds { get; set; }
        public string Date { get; set; }
        public string Home { get; set; }
        public string Host { get; set; }
        public int HomePoints { get; set; }
        public int HostPoints { get; set; }

    public Bet()
    {
        Odds = new List<string>();
    }

    public override string ToString()
    {
        String MatchInfo = String.Format("{0}: {1} -> {2}", Date, Match, Result);
        String OddsInfo = String.Empty;
        foreach (string d in Odds)
            OddsInfo += " | " + d;

        return MatchInfo + "\n" + OddsInfo;
    }

}
}