Pedro Paiva Posted January 23, 2021 at 11:57 PM Report Share #621058 Posted January 23, 2021 at 11:57 PM (edited) 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 January 24, 2021 at 11:52 PM by Pedro Paiva Formatação de Código Link to comment Share on other sites More sharing options...
Rui Carlos Posted January 27, 2021 at 08:47 PM Report Share #621085 Posted January 27, 2021 at 08:47 PM Sem perceber grande coisa de C#, diria que estás a tentar aceder a uma variável que está a null. Se o erro não te diz a linha, podes tentar correr o código num debugger linha a linha, e ver quando é que o erro aparece. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
Pedro Paiva Posted January 27, 2021 at 09:54 PM Author Report Share #621088 Posted January 27, 2021 at 09:54 PM DataRow dr = dt.NewRow(); Dá-me erro nesta linha especifica Link to comment Share on other sites More sharing options...
RicardoLopes Posted January 28, 2021 at 09:14 AM Report Share #621089 Posted January 28, 2021 at 09:14 AM 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 More sharing options...
Pedro Paiva Posted January 28, 2021 at 09:50 AM Author Report Share #621090 Posted January 28, 2021 at 09:50 AM 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. Link to comment Share on other sites More sharing options...
RicardoLopes Posted January 28, 2021 at 10:29 AM Report Share #621093 Posted January 28, 2021 at 10:29 AM 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 More sharing options...
Pedro Paiva Posted January 28, 2021 at 11:41 AM Author Report Share #621096 Posted January 28, 2021 at 11:41 AM Como posso fazer isso, tem algum exemplo, para me guiar ou sabe algo que me possa ajudar Link to comment Share on other sites More sharing options...
RicardoLopes Posted January 28, 2021 at 01:37 PM Report Share #621097 Posted January 28, 2021 at 01:37 PM 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. 1 Report Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now