Pedro Paiva 0 Posted January 23 Report Share Posted January 23 (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 by Pedro Paiva Formatação de Código Link to post Share on other sites
Rui Carlos 365 Posted January 27 Report Share Posted January 27 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 post Share on other sites
Pedro Paiva 0 Posted January 27 Author Report Share Posted January 27 DataRow dr = dt.NewRow(); Dá-me erro nesta linha especifica Link to post Share on other sites
rdolxd 8 Posted January 28 Report Share Posted January 28 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 post Share on other sites
Pedro Paiva 0 Posted January 28 Author Report Share Posted January 28 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 post Share on other sites
rdolxd 8 Posted January 28 Report Share Posted January 28 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 post Share on other sites
Pedro Paiva 0 Posted January 28 Author Report Share Posted January 28 Como posso fazer isso, tem algum exemplo, para me guiar ou sabe algo que me possa ajudar Link to post Share on other sites
rdolxd 8 Posted January 28 Report Share Posted January 28 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 post Share on other sites
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