Jump to content

Controlo de Mesas - Ajuda PAP


Pedro Paiva

Recommended Posts

Olá chamo-me Pedro e estou prestes a acabar o 12º ano em programação, mas para o terminar preciso de fazer a minha pap, em que estou bastante avançado só me falta uma coisa, se puder contar com a ajuda de alguém agradecia, o meu email e pedropaivathuglife@gmail.com

O que quero fazer é o controlo do que cada cliente consumiu numa mesa.

A minha pap é basicamente uma registadora.

Tenho algo feito mas dá-me erro 

Isto foi o que fiz, mas dá-me um erro chamado System.NullReferenceException: 'A referência de objecto não foi definida comore widget

public void mudarMesa()
        {
            LBLMesa.Text = "" + mesas;
            try
            {
                datagridform1.Rows.Clear();
                string sql = "SELECT quantidade as Quantidade, descricao as Descrição, preco as Preço, IVA FROM PAP.mesas WHERE mesa = '" + mesas + "'";
                MySqlConnection connection = new MySqlConnection("datasource=localhost;port=3306;username=root;password=");
                DataTable dt = (DataTable)datagridform1.DataSource;
                connection.Open();
                MySqlCommand cmdDataBase = new MySqlCommand(sql, connection);
                MySqlDataReader myReader = cmdDataBase.ExecuteReader();
                while(myReader.Read())
                {
                    DataRow dr = dt.NewRow();
                    dr["Quantidade"] = myReader.GetInt32(0);
                    dr["Descrição"] = myReader.GetString(1);
                    dr["Preço"] = myReader.GetFloat(2);
                    dr["IVA"] = myReader.GetString(3);
                    datagridform1.Rows.Add(dr);
                }
                //dt.AcceptChanges();
                //datagridform1.DataSource = dt;
                connection.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Edited by Pedro Paiva
Formatação de Código
Link to comment
Share on other sites

11 horas atrás, Pedro Paiva disse:

DataRow dr = dt.NewRow(); 

Dá-me erro nesta linha especifica

Assim de cabeça, se é nessa linha e assumindo ser uma Null Reference Exception, acho que a tua DataTable não está inicializada. Ou seja no teu código como vais buscá-la pelo data source da datagrid ou o data source ainda não deve estar definido ainda ou o data source não é do tipo DataTable.

Link to comment
Share on other sites

35 minutos atrás, Pedro Paiva disse:

Então o que e que posso fazer, também posso mudar a forma como faço se houver algo mais "fácil", o meu objetivo e conseguir ter dados de várias mesas e puder adicionar mais e ver todos os dados que tenho.

Depende de como tens toda a tua implementação feita, já tens a data source dessa grid carregada? então fazer debug e ver o porquê da DataTable estar a null (pode ser um cast mal feito), ou então se a grid ainda não está carregada e ainda não tem data source é normal ela vir a null! Em alternativa a isso é instanciares uma nova DataTable, carregares para lá os dados e no fim fazer set ao DataSource da tua data grid, isto deverá resolver! Mas dependendo do resto do teu código pode ou não ser a melhor solução!

Link to comment
Share on other sites

1 hora atrás, Pedro Paiva disse:

Como posso fazer isso, tem algum exemplo, para me guiar ou sabe algo que me possa ajudar

Pegando no teu snippet:

public void mudarMesa()
        {
            LBLMesa.Text = "" + mesas;
            try
            {
                datagridform1.Rows.Clear();
                string sql = "SELECT quantidade as Quantidade, descricao as Descrição, preco as Preço, IVA FROM PAP.mesas WHERE mesa = '" + mesas + "'";
                MySqlConnection connection = new MySqlConnection("datasource=localhost;port=3306;username=root;password=");
                DataTable dt = new DataTable();//(DataTable)datagridform1.DataSource;
                connection.Open();
                MySqlCommand cmdDataBase = new MySqlCommand(sql, connection);
                MySqlDataReader myReader = cmdDataBase.ExecuteReader();
                while(myReader.Read())
                {
                    DataRow dr = dt.NewRow();
                    dr["Quantidade"] = myReader.GetInt32(0);
                    dr["Descrição"] = myReader.GetString(1);
                    dr["Preço"] = myReader.GetFloat(2);
                    dr["IVA"] = myReader.GetString(3);
                    datagridform1.Rows.Add(dr);
                }
                //dt.AcceptChanges();
                //datagridform1.DataSource = dt;
                connection.Close();
              datagridform1.DataSource = dt; // set ao datasource da datagrid
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

Atenção que possivelmente vai te dar erro a dizer que aquelas colunas não existem na DataTable, para resolver isto dou te duas soluções, ou adicionas as colunas manualmente fazendo dt.Columns.Add(nomeColuna, typeof(tipoDaColuna))

Ou

Em vez de usares um DataReader usares um DataAdapter que já te mapeia isso automaticamente.

Deixo te aqui um link do stackoverflow para veres:
https://stackoverflow.com/questions/6073382/read-sql-table-into-c-sharp-datatable

 

O resto depois de teres a DataTable é só fazeres set ao DataSource.

Se ainda tiveres duvidas podes mandar me pm se precisares.

  • Vote 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.