Search code examples
c#datagridviewcells

C# Removing blank cells from datagridview


Is there a way to remove blank/null cells from datagrid view?

    private void button1_Click(object sender, EventArgs e)
    {

        DataTable dvpdt = new DataTable();

        HtmlAgilityPack.HtmlDocument doc;
        doc = new HtmlWeb().Load("https://rotogrinders.com/grids/nba-defense-vs-position-cheat-sheet-1493632?site=fanduele");
        HtmlNode node = doc.DocumentNode.SelectSingleNode("//section[@class='bdy content article full cflex reset long table-page']/following-sibling::script[1]");
        //Atlanta DVP: 
        int atlantastart = node.InnerText.IndexOf("Atlanta Hawks");
        int atlantalength = node.InnerText.IndexOf("Boston Celtics") - atlantastart;
        string atlantaoutput = node.InnerText.Substring(atlantastart, atlantalength).Replace("TEAM", "").Replace("\"", "").Replace("{:", "").Replace("FPPG:", "").Trim();
        string[] atlantasplit = atlantaoutput.Split(',');


        DataColumn dc = new DataColumn("Atlanta Hawks");
        DataColumn bdc = new DataColumn("Boston Celtics");
        DataColumn brdc = new DataColumn("Brooklyn Nets");



        dvpdt.Columns.Add(dc);
        DataRow dr = dvpdt.NewRow();


        foreach (string atlantaitem in atlantasplit)
        {
            dr = dvpdt.NewRow();
            dr["Atlanta Hawks"] = atlantaitem;
            dvpdt.Rows.Add(dr);

        }

        //Boston DVP:
        int bostonstart = node.InnerText.IndexOf("Boston Celtics");
        int bostonlength = node.InnerText.IndexOf("Brooklyn Nets") - bostonstart;
        string bostonoutput = node.InnerText.Substring(bostonstart, bostonlength).Replace("TEAM", "").Replace("\"", "").Replace("{:", "").Replace("FPPG:", "").Trim();
        string[] bostonsplit = bostonoutput.Split(',');


        dvpdt.Columns.Add(bdc);

        foreach (string bostonitem in bostonsplit)
        {
            dr = dvpdt.NewRow();
            dr["Boston Celtics"] = bostonitem;
            dvpdt.Rows.Add(dr);
        }

        //Brooklyn DVP:
        int brooklynstart = node.InnerText.IndexOf("Brooklyn Nets");
        int brooklynlength = node.InnerText.IndexOf("Charlotte Hornets") - brooklynstart;
        string brooklynoutput = node.InnerText.Substring(brooklynstart, brooklynlength).Replace("TEAM", "").Replace("\"", "").Replace("{:", "").Replace("FPPG:", "").Trim();
        string[] brooklynsplit = brooklynoutput.Split(',');
        dvpdt.Columns.Add(brdc);

        foreach (string brooklynitem in brooklynsplit)
        {
            dr = dvpdt.NewRow();
            dr["Brooklyn Nets"] = brooklynitem;
            dvpdt.Rows.Add(dr);
        }

        //end team load
        //Bind Datasource
        dataGridView2.DataSource = dvpdt;

        foreach (DataGridViewRow row in dataGridView2.Rows)
        {

            string t = row.Cells[0].Value == null ? String.Empty : row.Cells[0].Value.ToString();
            string a = row.Cells[1].Value == null ? String.Empty : row.Cells[1].Value.ToString();
            string b = row.Cells[2].Value == null ? String.Empty : row.Cells[2].Value.ToString();

            if (t.Contains("PG RK"))
            {
                dataGridView2.Rows.Remove(row);
            }
            if (t.Contains("SG RK"))
            {
                dataGridView2.Rows.Remove(row);
            }
            if (t.Contains("C RK"))
            {
                dataGridView2.Rows.Remove(row);
            }
            if (t.Contains("PF RK"))
            {
                dataGridView2.Rows.Remove(row);
            }
            if (t.Contains("SF RK"))
            {
                dataGridView2.Rows.Remove(row);
            }


            if (a.Contains("PG RK"))
            {
                dataGridView2.Rows.Remove(row);
            }
            if (a.Contains("SG RK"))
            {
                dataGridView2.Rows.Remove(row);
            }
            if (a.Contains("C RK"))
            {
                dataGridView2.Rows.Remove(row);
            }
            if (a.Contains("PF RK"))
            {
                dataGridView2.Rows.Remove(row);
            }
            if (a.Contains("SF RK"))
            {
                dataGridView2.Rows.Remove(row);
            }


            if (b.Contains("PG RK"))
            {
                dataGridView2.Rows.Remove(row);
            }
            if (b.Contains("SG RK"))
            {
                dataGridView2.Rows.Remove(row);
            }
            if (b.Contains("C RK"))
            {
                dataGridView2.Rows.Remove(row);
            }
            if (b.Contains("PF RK"))
            {
                dataGridView2.Rows.Remove(row);
            }
            if (b.Contains("SF RK"))
            {
                dataGridView2.Rows.Remove(row);
            }



        }




    }

Here is a screen shot demonstrating and example of what it looks like currently when ordering by the atlanta hawks column. I am trying to have all columns match up so I can compare the data side by side.

dgv

I tried searching for similar issues but having some issue. I think the closest thing I found was to import the data into a List.

enter image description here

Update: I tried the following to try to separate the two columns but this did not work either:

 private void button1_Click(object sender, EventArgs e)
    {

        DataTable dvpdt = new DataTable();

        HtmlAgilityPack.HtmlDocument doc;
        doc = new HtmlWeb().Load("https://rotogrinders.com/grids/nba-defense-vs-position-cheat-sheet-1493632?site=fanduele");
        HtmlNode node = doc.DocumentNode.SelectSingleNode("//section[@class='bdy content article full cflex reset long table-page']/following-sibling::script[1]");

        DataColumn dc = new DataColumn("Atlanta Hawks");
        DataColumn bdc = new DataColumn("Boston Celtics");
        DataColumn brdc = new DataColumn("Brooklyn Nets");
        DataRow dr = dvpdt.NewRow();

        //Add Columns 
        dvpdt.Columns.Add(dc);
        dvpdt.Columns.Add(bdc);



        //Atlanta DVP: 
        int atlantastart = node.InnerText.IndexOf("Atlanta Hawks");
        int atlantapglength = node.InnerText.IndexOf("PG RK") - atlantastart;
        int atlantasglength = node.InnerText.IndexOf("SG RK") - atlantastart;
        int atlantasflength = node.InnerText.IndexOf("SF RK") - atlantastart;
        int atlantapflength = node.InnerText.IndexOf("PF RK") - atlantastart;
        int atlantaclength = node.InnerText.IndexOf("C RK") - atlantastart;
        string atlantapgoutput = node.InnerText.Substring(atlantastart, atlantapglength).Replace("TEAM", "").Replace("\"", "").Replace("{:", "").Replace("FPPG:", "").Replace("Atlanta Hawks", "");
        string[] atlantapgsplit = atlantapgoutput.Split(',');
        string atlantasgoutput = node.InnerText.Substring(atlantastart, atlantasglength).Replace("TEAM", "").Replace("\"", "").Replace("{:", "").Replace("FPPG:", "").Replace("Atlanta Hawks", "");
        string[] atlantasgsplit = atlantasgoutput.Split(',');

        foreach (string atlantaitem in atlantasgsplit)
        {
            dr = dvpdt.NewRow();
            dr["Atlanta Hawks"] = atlantaitem;
            dvpdt.Rows.Add(dr);

        }



        //Boston DVP:
        int bostonstart = node.InnerText.IndexOf("Boston Celtics");
        int bostonpglength = node.InnerText.IndexOf("PG RK") - atlantastart;
        string bostonpgoutput = node.InnerText.Substring(bostonstart, bostonpglength).Replace("TEAM", "").Replace("\"", "").Replace("{:", "").Replace("FPPG:", "").Replace("Boston Celtics", "");
        string[] bostonpgsplit = bostonpgoutput.Split(',');

        foreach (string bostonitem in bostonpgsplit)
        {
            dr = dvpdt.NewRow();
            dr["Boston Celtics"] = bostonitem;
            dvpdt.Rows.Add(dr);

        }

enter image description here


Solution

  • You can try something like this, I do not have time to test this but it should work, if it does not work after some changings it may work, this may give you an idea about how to do it.

            for (int i = dataGridView1.Rows.Count; i > -1; --i)
            {
                DataGridViewRow row = dataGridView1.Rows[i];
                if (!row.IsNewRow && row.Cells[0].Value == null)
                {
                    dataGridView1.Rows.RemoveAt(i);
                }
    
                DataGridViewColumn clmn = dataGridView1.Columns[i];
                if (row.Cells[0].Value == null)
                {
                    dataGridView1.Columns.RemoveAt(i);
                }
            }