2016-07-26 74 views
1

我需要将两列中的值拆分为datagridview。 你可以看到我的价值观的截图在这里:如何将数据拆分为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); 
        } 

       } 

      } 


     } 


     } 

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

+0

你试图从右侧的DataGridView获取值? –

+0

你想创建一个数据透视表吗?您想要转换哪一列(结果或日期)? – jdweng

+0

@FtitihTAN:我编辑了我的照片。例如,我想在第一栏有“Broadmeadow”,第二栏有“Hamilton Olympic”,第三栏有“1”,第四栏有“1”,我希望现在更清楚:) – Marci

回答

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; 
    } 

} 
} 
+0

好吧,它现在在工作!谢谢你很mu CH! – Marci