Datagridview填充了datasource = {}

时间:2013-11-07 16:34:16

标签: c# visual-studio-2012 datagridview tabcontrol

我有一个最疯狂的问题,我有一个 tabcontrol ,我在其中添加一个标签页,然后创建一个datagridview,用一个查询作为数据源填充它并对其进行一些视觉上的更改,然后进行另一个标签页也是如此。

我运行代码,不知怎的,我得到了我想要在gridview中显示的数据一切正常,除了第二个中的视觉变化。我去调试并最终发现视觉变化没有发生,因为从技术上讲,查询返回第二个datagridview得到的数据源是= {}所以它有没有行来进行视觉更改。但是无论如何都会在datagridview上显示数据。 我尝试更改datagridviews的顺序,这是同一个问题,所以我认为关于命令的代码是什么,但我不明白究竟是什么,也不知道究竟是什么。

我正在使用C#中的Visual Studio 2012,访问Access 2010文件的数据。以下是有问题的代码:

        ///Tabela por calibrar
        DataTable tabelaEqui = null;
        tabelaEqui = calibracaoBL.planoCalibracaoAtualCalibradosServico(DateTime.Now.Year, servico);
        DataGridView gridPorCalibrar = new DataGridView();
        gridPorCalibrar.DataSource = tabelaEqui;

        tabControl1.TabPages.Add(cbServico.Text + " - Por Calibrar");

        tabControl1.TabPages[0].Controls.Add(gridPorCalibrar);
        gridPorCalibrar.Dock = DockStyle.Fill;
        gridPorCalibrar.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
        gridPorCalibrar.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells;
        for (int i = 0; i < gridPorCalibrar.Rows.Count - 1; i++)
        {
            for (int j = 5; j < gridPorCalibrar.Rows[i].Cells.Count; j++)
            {
                string s = gridPorCalibrar.Rows[i].Cells[j].Value.ToString();
                Boolean b = !s.Equals("");
                if (b)
                {
                    gridPorCalibrar.Rows[i].Cells[j].Style.BackColor = Color.Green;
                }
            }
        }
        mudarCabeçalho(gridPorCalibrar);


        ///Tabela Calibrados
        DataTable dt = null;
        dt = calibracaoBL.planoCalibracaoAnosAnterioresServico(DateTime.Now.Year, servico);
        DataGridView gridCalibrados = new DataGridView(); // here I got check and dt = {}
        gridCalibrados.DataSource = dt;

        tabControl1.TabPages.Add(cbServico.Text + " - Calibrados");

        tabControl1.TabPages[1].Controls.Add(gridCalibrados);
        gridCalibrados.Dock = DockStyle.Fill;
        gridCalibrados.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
        gridCalibrados.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells;
        for (int i = 0; i < gridCalibrados.Rows.Count - 1; i++)
        {
            for (int j = 5; j < gridCalibrados.Rows[i].Cells.Count; j++)
            {
                string s = gridCalibrados.Rows[i].Cells[j].Value.ToString();
                Boolean b = !s.Equals("");
                if (b)
                {
                    gridCalibrados.Rows[i].Cells[j].Style.BackColor = Color.Green;
                }
            }
        }
        mudarCabeçalho(gridCalibrados);

这是第一个: enter image description here

这是第二个: enter image description here

响应@varocarbas更新:

我在两点检查数据源是空白的。 第一点: dt = calibracaoBL.planoCalibracaoAnosAnterioresServico(DateTime.Now.Year,servico); //运行查询的方法返回{}。但是查询本身不是问题,因为它工作得很好,当我在其他地方尝试它时,它的工作正常。

第二点:     DataTable dt = null;     dt = calibracaoBL.planoCalibracaoAnosAnterioresServico(DateTime.Now.Year,servico);     DataGridView gridCalibrados = new DataGridView(); //这里我去检查dt变量并显示dt = {}

代码进入 for(int i = 0; i&lt; gridCalibrados.Rows.Count - 1; i ++)但是因为 gridCalibrados.Rows.Count = 0它会跳过循环。

这是方法mudarCabeçalho

    public void mudarCabeçalho(DataGridView grid)
    {
        for (int i = 5; i < grid.ColumnCount; i++)
        {
            string[]  s = grid.Columns[i].HeaderText.Split('-');
            switch (s[1])
            {
                case "01":
                    grid.Columns[i].HeaderText = "Jan";
                    break;
                case "02":
                    grid.Columns[i].HeaderText = "Fev";
                    break;
                case "03":
                    grid.Columns[i].HeaderText = "Mar";
                    break;
                case "04":
                    grid.Columns[i].HeaderText = "Abr";
                    break;
                case "05":
                    grid.Columns[i].HeaderText = "Mai";
                    break;
                case "06":
                    grid.Columns[i].HeaderText = "Jum";
                    break;
                case "07":
                    grid.Columns[i].HeaderText = "Jul";
                    break;
                case "08":
                    grid.Columns[i].HeaderText = "Ago";
                    break;
                case "09":
                    grid.Columns[i].HeaderText = "Set";
                    break;
                case "10":
                    grid.Columns[i].HeaderText = "Out";
                    break;
                case "11":
                    grid.Columns[i].HeaderText = "Nov";
                    break;
                case "12":
                    grid.Columns[i].HeaderText = "Dez";
                    break;

            }
        }
    }

0 个答案:

没有答案