Datagridview Dataset Problem [C#]

Asked

Viewed 80 times

1

All right?

I’m having trouble with the popular one DataGridViewwith data from Dataset.

In my button1 i perform the search, reading and import for the DataGriView of all xml files in a given directory. Until then it works normal, the data is displayed in the DataGridView.

  DataSet dataSet = new DataSet();

        try
        {
            string[] array2 = Directory.GetFiles("temPFiles", "*.xml");


            foreach (string name in array2)
            {
                dataSet.ReadXml(name);
                dtGridViewImportacao.DataSource = dataSet.Tables[9];
            }


            try
            {
                prgsbarImportacaoXML.BeginInvoke(new Action(() => {
                    prgsbarImportacaoXML.Style = ProgressBarStyle.Marquee;
                }));

                prgsbarImportacaoXML.BeginInvoke(new Action(() => {
                    prgsbarImportacaoXML.MarqueeAnimationSpeed = 5;
                }));

                lblStatus.BeginInvoke(new Action(() =>
                {
                    lblStatus.Text = "     Lendo arquivos XML individualmente...";
                }));


            }
            catch (Exception exImportarArqXML)
            {

                MessageBox.Show("Não foi possível realizar a importação do conteúdo do arquivo XML e salvá-lo. Certifique-se de que o mesmo possui uma estrutura correta e válida para um XML de compra. A aplicação está sendo encerrada. Certifique-se de que o arquivo selecionado remete-se a um XML associado a uma Nota Fiscal de COMPRA!\n\n" + exImportarArqXML.Message, "ERRO!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.Close();
            }



        }
        catch (Exception exLeituraXML)
        {

            MessageBox.Show("Erro ao realizar a leitura individual dos arquivos XML obtidos!\n\n" + exLeituraXML.Message, "ERRO!", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            Close();
        }

inserir a descrição da imagem aqui

But in the button2, when removing some columns I don’t need, the following error occurs:

'Invalidargument=Value '1' is not a valid value for index. Arg_paramname_name'

in the following part of the code:

 this.Invoke(new Action(() => lblStatus.Text = "  Reorganizando colunas desnecessárias para leitura..."));

        dtGridViewImportacaoXML.Columns.RemoveAt(1); //ERRO AQUI
        dtGridViewImportacaoXML.Columns.RemoveAt(2); //ERRO AQUI


        dtGridViewImportacaoXML.BeginInvoke(new Action(() => {
            try
            {

                dtGridViewImportacaoXML.Columns.Remove("CFOP");

            }
            catch (System.ArgumentException)
            {

            }


            catch (Exception exCPROD)
            {

            }
        }));


        dtGridViewImportacaoXML.BeginInvoke(new Action(() => {
            try
            {

                dtGridViewImportacaoXML.Columns.Remove("uCom");

            }
            catch (System.ArgumentException)
            {

            }


            catch (Exception exCPROD)
            {

            }
        }));


        dtGridViewImportacaoXML.BeginInvoke(new Action(() => {
            try
            {

                dtGridViewImportacaoXML.Columns.Remove("qCom");

            }
            catch (System.ArgumentException)
            {

            }


            catch (Exception exCPROD)
            {

            }
        }));

        dtGridViewImportacaoXML.BeginInvoke(new Action(() => {
            try
            {

                dtGridViewImportacaoXML.Columns.Remove("vUnCom");

            }
            catch (System.ArgumentException)
            {

            }


            catch (Exception exCPROD)
            {
            }
        }));


        dtGridViewImportacaoXML.BeginInvoke(new Action(() => {
            try
            {

                dtGridViewImportacaoXML.Columns.Remove("vProd");


            }
            catch (System.ArgumentException)
            {

            }


            catch (Exception exCPROD)
            {

            }
        }));

        dtGridViewImportacaoXML.BeginInvoke(new Action(() => {
            try
            {

                dtGridViewImportacaoXML.Columns.Remove("cEANTrib");

            }
            catch (System.ArgumentException)
            {

            }


            catch (Exception exCPROD)
            {

            }
        }));


        dtGridViewImportacaoXML.BeginInvoke(new Action(() => {
            try
            {

                dtGridViewImportacaoXML.Columns.Remove("uTrib");

            }
            catch (System.ArgumentException)
            {

            }


            catch (Exception exCPROD)
            {

            }
        }));

        dtGridViewImportacaoXML.BeginInvoke(new Action(() => {
            try
            {

                dtGridViewImportacaoXML.Columns.Remove("qTrib");

            }
            catch (System.ArgumentException)
            {

            }


            catch (Exception exCPROD)
            {

            }
        }));

        dtGridViewImportacaoXML.BeginInvoke(new Action(() => {
            try
            {

                dtGridViewImportacaoXML.Columns.Remove("vUnTrib");

            }
            catch (System.ArgumentException)
            {

            }


            catch (Exception exCPROD)
            {

            }
        }));


        dtGridViewImportacaoXML.BeginInvoke(new Action(() => {
            try
            {

                dtGridViewImportacaoXML.Columns.Remove("vDesc");

            }
            catch (System.ArgumentException)
            {

            }


            catch (Exception exCPROD)
            {

            }
        }));


        dtGridViewImportacaoXML.BeginInvoke(new Action(() => {
            try
            {

                dtGridViewImportacaoXML.Columns.Remove("indTot");

            }
            catch (System.ArgumentException)
            {

            }


            catch (Exception exCPROD)
            {

            }
        }));


        dtGridViewImportacaoXML.BeginInvoke(new Action(() => {
            try
            {

                dtGridViewImportacaoXML.Columns.Remove("CEST");

            }
            catch (System.ArgumentException)
            {

            }


            catch (Exception exCPROD)
            {

            }
        }));

        dtGridViewImportacaoXML.BeginInvoke(new Action(() => {
            try
            {

                dtGridViewImportacaoXML.Columns.Remove("indEscala");

            }
            catch (System.ArgumentException)
            {

            }


            catch (Exception exCPROD)
            {

            }
        }));

        dtGridViewImportacaoXML.BeginInvoke(new Action(() => {

            try
            {
                dtGridViewImportacaoXML.Columns.Remove("xPed");

            }
            catch (System.ArgumentException)
            {

            }

            catch (Exception exCPROD)
            {

            }

        }));

        dtGridViewImportacaoXML.BeginInvoke(new Action(() => {
            try
            {

                dtGridViewImportacaoXML.Columns.Remove("nFCI");

            }
            catch (System.ArgumentException)
            {

            }


            catch (Exception exCPROD)
            {

            }
        }));




        //lblStatus.BeginInvoke(new Action(() =>
        //{
        //    lblStatus.Text = "     Renomeando colunas necessárias para leitura...";
        //}));

        //dtGridViewImportacaoXML.BeginInvoke(new Action(() =>
        //{
        //    try
        //    {
        //        dtGridViewImportacaoXML.Columns[0].HeaderText = "Cód. Barras";
        //    }
        //    catch (Exception exCodBarras)
        //    {

        //        MessageBox.Show("Não foi possível encontrar a coluna referente ao Código de Barras do(s) produto(s). A aplicação está sendo encerrada. Certifique-se de que o arquivo selecionado remete-se a um XML associado a uma Nota Fiscal de COMPRA!\n\n" + exCodBarras.Message, "ERRO!", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
        //        Application.Exit();
        //    }

        //}));

        //dtGridViewImportacaoXML.BeginInvoke(new Action(() =>
        //{
        //    try
        //    {
        //        dtGridViewImportacaoXML.Columns[1].HeaderText = "NCM's";
        //    }
        //    catch (Exception exNCM)
        //    {

        //        MessageBox.Show("Não foi possível encontrar a coluna referente ao NCM do(s) produto(s). A aplicação está sendo encerrada. Certifique-se de que o arquivo selecionado remete-se a um XML associado a uma Nota Fiscal de COMPRA!\n\n" + exNCM.Message, "ERRO!", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
        //        Application.Exit();
        //    }

        //}));

It seems as if there were no columns.

So in my button3, which would be the export of the records to a text file, also nothing happens. Even though the records exist in the datagrid, nothing is exported.

for (int i = 0; i < dtGridViewImportacaoXML.Rows.Count - 1; i++)
        {
            using (System.IO.StreamWriter file =
            new System.IO.StreamWriter(@"DataBase\db.txt", true))
            {

                try
                {
                    file.WriteLine(dtGridViewImportacaoXML.Rows[i].Cells[0].Value.ToString() + "," + dtGridViewImportacaoXML.Rows[i].Cells[1].Value.ToString());

                }
                catch (Exception exLerLinha)
                {

                    MessageBox.Show("Não foi possível realizar a leitura individual das linhas do arquivo XML. Certifique-se de que o mesmo possui uma estrutura correta e válida para um XML de compra. A aplicação está sendo encerrada. Certifique-se de que o arquivo selecionado remete-se a um XML associado a uma Nota Fiscal de COMPRA!\n\n" + exLerLinha.Message, "ERRO!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    this.Close();
                }


            }

        }

The funny thing is that I used the following MessageBox at the events Click's of each button to check the amount of records and columns, both appear values greater than zero.

MessageBox.Show(dtGridViewImportacao.Rows.Count.ToString()); // QUANTIDADE DE REGISTROS É MAIOR QUE 0

 MessageBox.Show(dtGridViewImportacao.Columns.Count.ToString()); // QUANTIDADE DE COLUNAR É MAIOR QUE 0

Could someone tell me where I’m going wrong, please? I appreciate everyone’s attention!

  • You should understand that the first item is 0 and not 1.

  • With the value 0 the same problem also occurs. I had already tested. System.Argued tofrangeexception: 'Invalidargument=Value '0' is not a valid index value. Arg_paramname_name'

  • The table has 19 columns, in theory starting with 0 or 1 should work, not?

1 answer

2


I think the easiest way, and maybe avoiding the error, will be to change the DataTable associated with DataGridView and then do the assignment again:

DataTable dt = dtGridViewImportacaoXML.DataSource as DataTable;

dt?.Columns.Remove("Column1");
dt?.Columns.Remove("Column2");

dtGridViewImportacaoXML.DataSource = dt;

Columns will have to be removed by name and not by index, which is even more "safe", since the column index may vary (maybe not in this case, but there is this possibility).

Browser other questions tagged

You are not signed in. Login or sign up in order to post.