reznor Posted April 4, 2014 Report Share Posted April 4, 2014 (edited) 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 April 4, 2014 by reznor Link to comment Share on other sites More sharing options...
bioshock Posted April 4, 2014 Report Share Posted April 4, 2014 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 More sharing options...
reznor Posted April 4, 2014 Author Report Share Posted April 4, 2014 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 More sharing options...
reznor Posted April 4, 2014 Author Report Share Posted April 4, 2014 Não funciona, e não estou a conseguir entender o raciocionio com DataGrids em vez de listas :\ Link to comment Share on other sites More sharing options...
bioshock Posted April 4, 2014 Report Share Posted April 4, 2014 E não funciona porque...? Erros, etc. Quanto às DataGrids tens de passar o número da linha ou o ID, algo único, para o array. Link to comment Share on other sites More sharing options...
reznor Posted April 7, 2014 Author Report Share Posted April 7, 2014 (edited) 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: 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 April 7, 2014 by reznor Link to comment Share on other sites More sharing options...
reznor Posted April 7, 2014 Author Report Share Posted April 7, 2014 (edited) 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 April 7, 2014 by reznor 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