Jump to content
N3lson

Fixar tamanho da Coluna (DATAGRID)

Recommended Posts

N3lson

Boas tenho o seguinte código para preencher a datagrid

cmd = new MySqlCommand(query, con.liga());

			con.abre();

			cmd.Parameters.AddWithValue("@maquina", maquina);

			reader = cmd.ExecuteReader();

			this.GridPreventivas.RowHeadersVisible = false;

			dtPreventivas.Columns.Add("id");
			dtPreventivas.Columns.Add("Data");
			dtPreventivas.Columns.Add("Freq.");
			dtPreventivas.Columns.Add("Actividade a executar");
			dtPreventivas.Columns.Add("Operador");
			dtPreventivas.Columns.Add("Impressão");

			string _print = "";

			while (reader.Read())
			{
					int id = (int)reader["id"];
					DateTime data = Convert.ToDateTime(reader["data_inicio"]);
					int freq = (int)reader["frequencia"];
					string actividade = (string)reader["actividade"];
					var operador = Convert.ToString((int)reader["operador"]);
					var print = (int)reader["print"];

					switch (print)
					{
						case 1:
							_print = "Por Imprimir";
							break;
						case 2:
							_print = "Impresso";
							break;
					}

				   dtPreventivas.Rows.Add(
										   id,
										   data.ToString().Substring(0, 10),
										   freq ,
										   actividade,
										   funcao.RetornarOperador(operador),
										   _print
										 );
			 }


			this.GridPreventivas.DataSource = dtPreventivas;

			this.GridPreventivas.Columns["id"].Visible = false;


		MessageBox.Show(this.GridPreventivas.Columns["Data"].ToString()); // este valor indica-me o index 2

O messageBox indica o index 2 mas se fizer o this.GridPreventivas.Columns[2].Width = 45; dá erro Object reference not set to an instance of an object.

Edited by apocsantos

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Share this post


Link to post
Share on other sites
apocsantos

Bom dia,

Estás a usar Windows Forms ?

A primeira questão que se me assalta à mente é porque motivo usas o "this". a todos os instantes....

A segunda é porque usas o "this" na mssagebox, uma vez que "this" refere-se ao objecto corrente, que no caso da messagebox, seria a propria message box, logo a menos que o datagridview estivesse dentro da messagebox, o this não faz sentido!

Repara:

This -> Esta

Se o objecto que contem a datagridview for um winform, this.GridPreventivas -> a datagrid preventivas existe no objecto actual (este).

Quando usas a messagebox, estás a referir uma datagrid que supostamente existe dentro da messagebox, porque "this" passa a ser "messagebox".

Cordiais cumprimentos,

Apocsantos

  • Vote 1

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Share this post


Link to post
Share on other sites
N3lson

Obrigado pela resposta.

É o habito de programar em jquery :) , estou a iniciar ( por conta própria no c# ) e como tenho visto esse uso ...

Mesmo sem usar o this o resultado é o mesmo.

Como fazer ?

Edited by N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Share this post


Link to post
Share on other sites
vikcch

Boas,

Não seria mais simples preencher logo a datatable com o resultado da query?

ex:

DataTable dtPreventivas = new DataTable();
dtPreventivas.Load(reader);

Esse switch (print) até pode ser logo incluído na query... o funcao.RetornarOperador(operador) não sei o que faz mas secalhar também.... de qualquer maneira podes sempre alterar as colunas da datatable...

Quando à duvida de redimensionar a coluna, não sei qual pode ser o problema... se meteres this.GridPreventivas.Columns["Data"].Width = 45; vai dar o mesmo erro, certo?

Também gosto de usar o this quando me estou a referir a objecto do form...

Share this post


Link to post
Share on other sites
apocsantos

Boa noite,

MessageBox.Show(nomeDoForm.GridPreventivas.Columns["Data"].ToString()); // troca nomeDoForm, pelo nome do form onde está a datagrid.

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Share this post


Link to post
Share on other sites
N3lson

Boas,

Não seria mais simples preencher logo a datatable com o resultado da query?

ex:

DataTable dtPreventivas = new DataTable();
dtPreventivas.Load(reader);

Esse switch (print) até pode ser logo incluído na query... o funcao.RetornarOperador(operador) não sei o que faz mas secalhar também.... de qualquer maneira podes sempre alterar as colunas da datatable...

Quando à duvida de redimensionar a coluna, não sei qual pode ser o problema... se meteres this.GridPreventivas.Columns["Data"].Width = 45; vai dar o mesmo erro, certo?

Também gosto de usar o this quando me estou a referir a objecto do form...

Eu estou a usar o DataReader para preencher a Tabela pois necessito de personalizar os campos, esse funcao.retornar... é uma exemplo disso (foi a unica forma que descobri de personalizar os campos)

Edited by N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Share this post


Link to post
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.