Jump to content

[Resolvido] Obter dados de uma Row


reznor
 Share

Recommended Posts

checkbox2.PNG

Bom dia!

Preciso da vossa ajuda!

Acima deixo uma imagem para que consigam perceber o que quero!

Então, no form da esquerda não há muito a dizer, mas reparem que existe lá um DataGridView!

Chegando ao campo "Diligências", abro o Form de consulta da direita, que é fundamentalmente composto por um datagrid com restrições de ID's. O que eu preciso é que as linhas que eu 'checkei' passem para o datagridview do form da esquerda, quando clicar no "button2". Não estou a conseguir de maneira nenhuma desde as 8 da manhã :\

Alguem me pode ajudar?

Obrigados!

Edited by reznor
Link to comment
Share on other sites

Exemplo prático:

Form1:

public partial class Form1 : Form
{
	public List<string> clientes = new List<string>();

	private void button1_Click(object sender, EventArgs e)
	{
		Form2 fm = new Form2(clientes); // Envia os clientes actuais para o Form2 -> caso precises
		fm.ShowDialog();
	}

	private void Form1_Load(object sender, EventArgs e)
	{
		clientes.Add("Alfredo"); // introduz um cliente
	}

	private void button2_Click(object sender, EventArgs e)
	{
		for (int i = 0; i <= clientes.Count - 1; i++) {
			MessageBox.Show(clientes[i].ToString()); // Output dos clientes
		}
	}
}

Form2:

public partial class Form2 : Form
{
	public List<string> clientes;
	public Form2(List<string> clientes__){ // Cria um construtor capaz de receber os clientes provenientes do form1
		InitializeComponent();
		clientes = clientes__;
	}

	private void Form2_Load(object sender, EventArgs e)
	{
		clientes.Add("Maria"); // Adiciona um novo cliente
	}
}

Quando inicializas o Form1 pela primeira vez o output da MessageBox é apenas "Alfredo". Quando entrares no Form2 e fechares o mesmo, se voltares a clicar no Button2 do Form1, o output da MessageBox será então "Alfredo"; "Maria".

Agora basta adaptares isto para as tuas necessidades.

Link to comment
Share on other sites

Exemplo prático:

Form1:

public partial class Form1 : Form
{
	public List<string> clientes = new List<string>();

	private void button1_Click(object sender, EventArgs e)
	{
		Form2 fm = new Form2(clientes); // Envia os clientes actuais para o Form2 -> caso precises
		fm.ShowDialog();
	}

	private void Form1_Load(object sender, EventArgs e)
	{
		clientes.Add("Alfredo"); // introduz um cliente
	}

	private void button2_Click(object sender, EventArgs e)
	{
		for (int i = 0; i <= clientes.Count - 1; i++) {
			MessageBox.Show(clientes[i].ToString()); // Output dos clientes
		}
	}
}

Form2:

public partial class Form2 : Form
{
	public List<string> clientes;
	public Form2(List<string> clientes__){ // Cria um construtor capaz de receber os clientes provenientes do form1
		InitializeComponent();
		clientes = clientes__;
	}

	private void Form2_Load(object sender, EventArgs e)
	{
		clientes.Add("Maria"); // Adiciona um novo cliente
	}
}

Quando inicializas o Form1 pela primeira vez o output da MessageBox é apenas "Alfredo". Quando entrares no Form2 e fechares o mesmo, se voltares a clicar no Button2 do Form1, o output da MessageBox será então "Alfredo"; "Maria".

Agora basta adaptares isto para as tuas necessidades.

Obrigado! Vou tentar

Link to comment
Share on other sites

Não funciona porque não consigo perceber o raciocínio

Contudo, baseando-me em listas, resolvi criar uma lista no Primeiro form que vai receber os dados da DGV do outro form.

private void button2_Click(object sender, EventArgs e)
    {
	    DataTable table = new DataTable("LinhasDiligencia");
	    foreach (DataGridViewColumn column in dataGridView1.Columns)
	    {
		    table.Columns.Add(column.Name, typeof(string));
	    }
	    for (int i = 0; i < dataGridView1.SelectedRows.Count; i++)
	    {
		    table.Rows.Add();
		    for (int j = 0; j < dataGridView1.Columns.Count; j++)
		    {
			    table.Rows[i][j] = dataGridView1[j, i].Value;
			    DataRow dr = table.Rows[i];
			    ListViewItem listviewit = new ListViewItem(dr["Data Diligência"].ToString());
			    fph.listView1.Items.Add(listviewit);

		    }
	    }

Com este codigo crio uma datatable que depois vou associar à listview do outro form!

E funciona!!

Mas não funciona correctamente, o resultado é este, depois de button2:

diligenciaslist.PNG

Insere 4 registos quando deveria inserir apenas 1. Eu sei que o problema está no código eheh, mas não consigo resolver...

A cena é, selecciono a row e carrego em button 2 e deve aparecer apenas 1 vez a data na listview.

Edited by reznor
Link to comment
Share on other sites

Já consegui 😄

Obrigado!

private void button2_Click(object sender, EventArgs e)
 {
	 DataTable table = new DataTable();
	 foreach (DataGridViewColumn column in dataGridView1.Columns)
		 table.Columns.Add(column.Name, typeof(string)); //tentar meter CELL TYPE, segurança de dados
	 for (int i = 0; i < dataGridView1.SelectedRows.Count; i++)
	 {
		 table.Rows.Add();
		 for (int j = 0; j < dataGridView1.Columns.Count; j++)
		 {
			 table.Rows[i][j] = dataGridView1.SelectedRows[i].Cells[j].Value;
                fph.dataGridView1.DataSource = table;
		 }
	 }

Mudei de List para DGV e consigo exactamente o que queria!

Obrigado Bioshock pela tua ajuda!

Edited by reznor
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
 Share

×
×
  • 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.