none
pegar dados checkedlistview e adicionar linhas no grid RRS feed

  • Pergunta

  • Quando agente começa a fazer as coisas é que vê que não sabe nada...

    Pessoal, estou me debatendo com o seguinte problema:

    tenho uma chekedboxlistview em que serão selecionados vários itens de uma vez, pelos checkboxes...

    esse checked deverão, ao se clicar num botão, ser inseridos no datagrid, como adição de linhas.

    e essas linha devem ser inseridas a partir de uma coluna específica...

    preencho o grid pelo design, o listview por uma query sql, c#, VS17...

    vou continuar tentando aqui...

    terça-feira, 24 de janeiro de 2017 22:20

Respostas

  • Cara fiz aqui um exemplo:

     private void btnTeste_Click(object sender, EventArgs e)
            {
                foreach (var item in checkedListBox1.SelectedItems)
                {
                  
                    dataGridView1.AllowUserToAddRows = true;  
                    int index = dataGridView1.NewRowIndex; 
                    dataGridView1.Rows[index].Cells[0].Value = item;
                    dataGridView1.BeginEdit(true);
                }
            }


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Senior Developer .NET C#
    Enterprise Development Leader JAMSOFT Informática
    Email: ralms@ralms.net
    Blog - GitHub - LinkedIn

    • Marcado como Resposta tracaja quarta-feira, 25 de janeiro de 2017 02:11
    quarta-feira, 25 de janeiro de 2017 00:22
  • suei brother, mas consegui, acabei agorinha... dá uma olhada:

                foreach (ListViewItem item in listView1.CheckedItems)
                {
                    if (item.Checked == true)
                    { 
                    DataRow addrow = bdVestibulinhoDataSet.evento.NewRow();
                        addrow[13] = item.SubItems[0].Text;
                        addrow[14] = item.SubItems[1].Text;
                        addrow[15] = item.SubItems[2].Text;
                        addrow[16] = item.SubItems[3].Text;

                        bdVestibulinhoDataSet.evento.Rows.InsertAt(addrow, dgvCadEvento.CurrentRow.Index + 1);
                    }
                }

    eu não tava vendo que o conter++ era a coluna e o addrow, 13 era a linha, desse jeito aí ficou perfeito, eu seleciono o sujeito e ele insere os valores da listview embaixo em novas linhas...pultz....

    tava pensando em mudar já...valeu pela força...agora é gravar isso no banco....

    • Marcado como Resposta tracaja sexta-feira, 27 de janeiro de 2017 00:53
    sexta-feira, 27 de janeiro de 2017 00:53
  • suei brother, mas consegui, acabei agorinha... dá uma olhada:

                foreach (ListViewItem item in listView1.CheckedItems)
                {
                    if (item.Checked == true)
                    { 
                    DataRow addrow = bdVestibulinhoDataSet.evento.NewRow();
                        addrow[13] = item.SubItems[0].Text;
                        addrow[14] = item.SubItems[1].Text;
                        addrow[15] = item.SubItems[2].Text;
                        addrow[16] = item.SubItems[3].Text;

                        bdVestibulinhoDataSet.evento.Rows.InsertAt(addrow, dgvCadEvento.CurrentRow.Index + 1);
                    }
                }

    eu não tava vendo que o conter++ era a coluna e o addrow, 13 era a linha, desse jeito aí ficou perfeito, eu seleciono o sujeito e ele insere os valores da listview embaixo em novas linhas...pultz....

    tava pensando em mudar já...valeu pela força...agora é gravar isso no banco....

    Parabéns fico feliz!

    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Senior Developer .NET C#
    Enterprise Development Leader JAMSOFT Informática
    Email: ralms@ralms.net
    Blog - GitHub - LinkedIn

    • Marcado como Resposta tracaja terça-feira, 31 de janeiro de 2017 21:43
    sexta-feira, 27 de janeiro de 2017 13:56

Todas as Respostas

  • ah, já vi que tenho que suspender o data-bound pra poder inserir as linhas, num sei como...to procurando...
    terça-feira, 24 de janeiro de 2017 22:36
  • estou tentando algo do tipo foreach listview1.itens checked = true, count, datagrid addrow...

    num to conseguindo montar....

    terça-feira, 24 de janeiro de 2017 22:48
  • Cara fiz aqui um exemplo:

     private void btnTeste_Click(object sender, EventArgs e)
            {
                foreach (var item in checkedListBox1.SelectedItems)
                {
                  
                    dataGridView1.AllowUserToAddRows = true;  
                    int index = dataGridView1.NewRowIndex; 
                    dataGridView1.Rows[index].Cells[0].Value = item;
                    dataGridView1.BeginEdit(true);
                }
            }


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Senior Developer .NET C#
    Enterprise Development Leader JAMSOFT Informática
    Email: ralms@ralms.net
    Blog - GitHub - LinkedIn

    • Marcado como Resposta tracaja quarta-feira, 25 de janeiro de 2017 02:11
    quarta-feira, 25 de janeiro de 2017 00:22
  • Ah, já vou testar...
    quarta-feira, 25 de janeiro de 2017 02:07
  • Beleza! Valeu. Eu estava complicando em vez de resolver...muito bom.

    Vou tentar acertar a linha em que tem que inserir, preciso enfiar isso no meio da tabela, na verdade vai ser depois do primeiro item...

    hora que eu conseguir eu posto aqui...

    Obrigado.

    quarta-feira, 25 de janeiro de 2017 02:13
  • hummm, estou pensando....só consegui inserir uma linha nova com o valor...pq?

    tenho que colocar no meio do grid entre outros dados....tô penando nessa parte....

    quarta-feira, 25 de janeiro de 2017 03:09
  • num falta um addrow aí?
    quarta-feira, 25 de janeiro de 2017 03:10
  • AH, detalhe, são 3 colunas no listview...
    quarta-feira, 25 de janeiro de 2017 14:01
  • tentei assim, quase o que eu quero pq ele insere 60 linhas em vez dos valores das linhas do listview....

    acho que estou errando na referencia ao listview....alguma ideia?

    private void btnReservarPredio_Click(object sender, EventArgs e)
            {
                dgvCadEvento.AllowUserToAddRows = true;
                dgvCadEvento.BeginEdit(true);

                foreach (var item in listView1.SelectedItems.ToString())
                {
                    DataRow addrow = bdVestibulinhoDataSet.evento.NewRow();
                    addrow[2] = item;
                    bdVestibulinhoDataSet.evento.Rows.InsertAt(addrow, 2);
                   
                }
            }
    quarta-feira, 25 de janeiro de 2017 17:07
  • Você tinha informado acima anteriormente que era um CheckListBox.

    Nesse Caso seu atual troque por isso pra ver se resolve!

    private void btnReservarPredio_Click(object sender, EventArgs e)
            {
                dgvCadEvento.AllowUserToAddRows = true;
                dgvCadEvento.BeginEdit(true); 
                for (int i = 0; i < listView1.Items.Count; i++)
                {
    
                    if(listView1.Items[i].Selected)
                    {
                        DataRow addrow = bdVestibulinhoDataSet.evento.NewRow();
                        addrow[2] = item;
                        bdVestibulinhoDataSet.evento.Rows.InsertAt(addrow, 2);
                    }   
                }
            }


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Senior Developer .NET C#
    Enterprise Development Leader JAMSOFT Informática
    Email: ralms@ralms.net
    Blog - GitHub - LinkedIn

    quarta-feira, 25 de janeiro de 2017 17:58
  • não, piorou, tem que definir o item pro addrows...

    Cara, obrigado pela ajuda, to ficando loco com essas coisas...

    to tentando...

    quarta-feira, 25 de janeiro de 2017 18:10
  • Vamos lá ....

    Iremos conseguir rss Coloca o print aqui da tela que tem esses controles e o código.

    Por favor!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Senior Developer .NET C#
    Enterprise Development Leader JAMSOFT Informática
    Email: ralms@ralms.net
    Blog - GitHub - LinkedIn

    quarta-feira, 25 de janeiro de 2017 18:24
  • tentei colocar a imagem mas ele disse que precisa verificar minha conta....vou ver isso...

    seleciona os itens na listview, pelos checkbox, e insere os valores na linha correspondente abaixo do que já está cadastrado, o resto da linha pode ficar vazio....

    carrego a listview assim...

     try
                {
                    SqlConnection con = new SqlConnection(conexaoString);
                    // preenche o dataset
                    string strSQL = "SELECT nomePredio, qtdSala, alunoSala, capTotal FROM predio ORDER BY nomePredio";
                    _DataSet = new DataSet();
                    _DataAdapterPredio = new SqlDataAdapter(strSQL, con);
                    _DataAdapterPredio.Fill(_DataSet, "predio");
                    System.Data.DataTable dtable = _DataSet.Tables["predio"];
                    // limpa o ListView
                    listView1.Items.Clear();
                    // exibe os itens no controle ListView
                    for (int i = 0; i < dtable.Rows.Count; i++)
                    {
                        DataRow drow = dtable.Rows[i];
                        // Somente as linhas que não foram deletadas
                        if (drow.RowState != DataRowState.Deleted)
                        {
                            // Define os itens da lista
                            ListViewItem lvi = new ListViewItem(drow["nomePredio"].ToString());
                            lvi.SubItems.Add(drow["qtdSala"].ToString());
                            lvi.SubItems.Add(drow["alunoSala"].ToString());
                            lvi.SubItems.Add(drow["capTotal"].ToString());
                            // Inclui os itens no ListView
                            listView1.Items.Add(lvi);
                        }
                    }
                }
                catch (Exception ex)
    quarta-feira, 25 de janeiro de 2017 19:27
  • maaano...tá quase...aposto que é alguma coisa bem óbvia que não estou vendo...

    fiz assim e ele repetiu todos os itens da listview quatro vezes, mas inseriu as linhas....

    como que eu faço essa verificação pra poder colocar imagem aqui????

    quarta-feira, 25 de janeiro de 2017 21:25
  • faltou o código....

            private void btnReservarPredio_Click(object sender, EventArgs e)
            {
                dgvCadEvento.AllowUserToAddRows = true;
                dgvCadEvento.BeginEdit(true);
                foreach (ListViewItem itemRow in this.listView1.Items)
                {
                    for (int i = 0; i < itemRow.SubItems.Count; i++)
                    {
                        DataRow addrow = bdVestibulinhoDataSet.evento.NewRow();
                        addrow[2] = itemRow;
                        bdVestibulinhoDataSet.evento.Rows.InsertAt(addrow, 2);
                    }
                }

    quarta-feira, 25 de janeiro de 2017 21:26
  • Cara então substitua o:

      for (int i = 0; i < itemRow.SubItems.Count; i++)

    exatamente por isso:

    if(itemRow.Selected)

    Só isso e acredito que é o que deseja!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Senior Developer .NET C#
    Enterprise Development Leader JAMSOFT Informática
    Email: ralms@ralms.net
    Blog - GitHub - LinkedIn

    quarta-feira, 25 de janeiro de 2017 23:52
  • será? vou testar....me mato se for só isso....
    quarta-feira, 25 de janeiro de 2017 23:56
  • não foi...

    olha, eu fiz um diferente:

    //foreach (ListViewItem itemRow in this.listView1.Items)
                    //{
                    //    for (int i = 0; i < itemRow.SubItems.Count; i++)
                    //    {
                    //        DataRow addrow = bdVestibulinhoDataSet.evento.NewRow();
                    //        addrow[2] = listView1.Items[i].SubItems[i].Text;
                    //        bdVestibulinhoDataSet.evento.Rows.InsertAt(addrow, 2);
                    //    }
                    //}
    esse aí faz o seguinte, copia os valores das 4 colunas do listview, 4 vezes, linha a linha na coluna 2...é quase o que eu quero....mas pelo menos ele pegou os valores da listview selecionados ....

    quinta-feira, 26 de janeiro de 2017 00:07
  • eu não estou conseguindo pensar o seguinte: a ordem é inserira a linha inteira da listview selecionada como uma linha inteira no grid....ou eu tenho que falar insira a linha1 da coluna1 do listview na coluna linhaX do grid e a coluna2 e a linha2 do listview na coluna x+1 linha x+1 do grid e assim por diante????????
    quinta-feira, 26 de janeiro de 2017 00:11
  • Faz o seguinte me diga quantas colunas você tem ai cara e os nomes delas, que estão no listview.

    Nome e Tipo..
    Exemplo:

    Descricao (string)
    Nota (int)

    e assim por diante... já sei como resolver seu problema!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Senior Developer .NET C#
    Enterprise Development Leader JAMSOFT Informática
    Email: ralms@ralms.net
    Blog - GitHub - LinkedIn

    quinta-feira, 26 de janeiro de 2017 00:50
  • são 0,1,2,3 colunas

    ListViewItem lvi = new ListViewItem(drow["nomePredio"].ToString());
                            lvi.SubItems.Add(drow["qtdSala"].ToString());
                            lvi.SubItems.Add(drow["alunoSala"].ToString());
                            lvi.SubItems.Add(drow["capTotal"].ToString());

    display index - 0

    name - columnHeader0

    e assim por diante...

    no grid é tudo textcolumn....

    tomara, pq eu não aguento mais olhar pra isso....kkkkk

    grato,

    FCL

    quinta-feira, 26 de janeiro de 2017 01:59
  • Substitua sua função por essa pra ver se era mais ou menos isso que você queria.

    private void btnReservarPredio_Click(object sender, EventArgs e)
            {
                dgvCadEvento.DataSource = null;
                dgvCadEvento.Rows.Clear();
                dgvCadEvento.Columns.Clear();
                dgvCadEvento.AllowUserToAddRows = true; 
                foreach (ListViewItem itemRow in this.listView1.Items)
                {
                    if (itemRow.Selected)
                    {
                        if (dgvCadEvento.Columns.Count == 0)
                        {
                            dgvCadEvento.Columns.Add("nomePredio", "NOME PREDIO");
                            dgvCadEvento.Columns.Add("qtdSala", "Qtd. Sala");
                            dgvCadEvento.Columns.Add("alunoSala", "Aluno Sala");
                            dgvCadEvento.Columns.Add("capTotal", "Cap. Total");
                        }
                        var index = dgvCadEvento.Rows.Add();
                        dgvCadEvento.Rows[index].Cells[0].Value = itemRow.Text;
                        dgvCadEvento.Rows[index].Cells[1].Value = itemRow.SubItems[0].Text;
                        dgvCadEvento.Rows[index].Cells[2].Value = itemRow.SubItems[1].Text;
                        dgvCadEvento.Rows[index].Cells[3].Value = itemRow.SubItems[2].Text; 
                    } 
                }
            }


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Senior Developer .NET C#
    Enterprise Development Leader JAMSOFT Informática
    Email: ralms@ralms.net
    Blog - GitHub - LinkedIn

    quinta-feira, 26 de janeiro de 2017 19:02
  • pra já mestre...
    quinta-feira, 26 de janeiro de 2017 19:04
  • vixe, pirou, apagou tudo, mexi mas não deu...

    não pode dá clear pq tem usar a base que está lá....

    dá uma olhada nesse:

                dgvCadEvento.AllowUserToAddRows = true;
                dgvCadEvento.BeginEdit(true);

    foreach (ListViewItem itemRow in this.listView1.Items)
                {
                    DataRow addrow = bdVestibulinhoDataSet.evento.NewRow();
                    int counter = 13;
                    foreach (ListViewItem.ListViewSubItem subItem in itemRow.SubItems)
                    {
                        addrow[counter++] = subItem.Text;
                    }

                    bdVestibulinhoDataSet.evento.Rows.InsertAt(addrow, 13);
                }

    esse código quase chega lá tbm, só que ele insere tudo na última linha e repete os valores...

    o correto é que seja a partir da coluna 13 como está aí, só abaixo da linha selecionada no grid, eu tentei inserir o currentRow, mas não consegui....se eu conseguisse por imagens aqui ia ficar mais fácil pra vc entender....pq não está verificando minha conta? tenho que logar o micro com ela?

    quinta-feira, 26 de janeiro de 2017 19:14
  • eu entendi o que vc tentou fazer, mas não deu certo, ele não inseriu nem as colunas nem os valores...
    quinta-feira, 26 de janeiro de 2017 19:17
  • Cara faz o seguinte tem coisa diferente ai em seu projeto!

    Manda ele pra mim só assim posso lhe ajudar

    ralms@ralms.net

    mande que  irei lhe ajudar com muito prazer blz!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Senior Developer .NET C#
    Enterprise Development Leader JAMSOFT Informática
    Email: ralms@ralms.net
    Blog - GitHub - LinkedIn

    quinta-feira, 26 de janeiro de 2017 20:58
  • suei brother, mas consegui, acabei agorinha... dá uma olhada:

                foreach (ListViewItem item in listView1.CheckedItems)
                {
                    if (item.Checked == true)
                    { 
                    DataRow addrow = bdVestibulinhoDataSet.evento.NewRow();
                        addrow[13] = item.SubItems[0].Text;
                        addrow[14] = item.SubItems[1].Text;
                        addrow[15] = item.SubItems[2].Text;
                        addrow[16] = item.SubItems[3].Text;

                        bdVestibulinhoDataSet.evento.Rows.InsertAt(addrow, dgvCadEvento.CurrentRow.Index + 1);
                    }
                }

    eu não tava vendo que o conter++ era a coluna e o addrow, 13 era a linha, desse jeito aí ficou perfeito, eu seleciono o sujeito e ele insere os valores da listview embaixo em novas linhas...pultz....

    tava pensando em mudar já...valeu pela força...agora é gravar isso no banco....

    • Marcado como Resposta tracaja sexta-feira, 27 de janeiro de 2017 00:53
    sexta-feira, 27 de janeiro de 2017 00:53
  • suei brother, mas consegui, acabei agorinha... dá uma olhada:

                foreach (ListViewItem item in listView1.CheckedItems)
                {
                    if (item.Checked == true)
                    { 
                    DataRow addrow = bdVestibulinhoDataSet.evento.NewRow();
                        addrow[13] = item.SubItems[0].Text;
                        addrow[14] = item.SubItems[1].Text;
                        addrow[15] = item.SubItems[2].Text;
                        addrow[16] = item.SubItems[3].Text;

                        bdVestibulinhoDataSet.evento.Rows.InsertAt(addrow, dgvCadEvento.CurrentRow.Index + 1);
                    }
                }

    eu não tava vendo que o conter++ era a coluna e o addrow, 13 era a linha, desse jeito aí ficou perfeito, eu seleciono o sujeito e ele insere os valores da listview embaixo em novas linhas...pultz....

    tava pensando em mudar já...valeu pela força...agora é gravar isso no banco....

    Parabéns fico feliz!

    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Senior Developer .NET C#
    Enterprise Development Leader JAMSOFT Informática
    Email: ralms@ralms.net
    Blog - GitHub - LinkedIn

    • Marcado como Resposta tracaja terça-feira, 31 de janeiro de 2017 21:43
    sexta-feira, 27 de janeiro de 2017 13:56