Usuário com melhor resposta
pegar dados checkedlistview e adicionar linhas no grid

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...
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
-
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
-
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....
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
Todas as 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
-
-
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.
-
-
-
-
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);}} -
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 -
-
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 -
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) -
-
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);
}
} -
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 -
-
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 .... -
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????????
-
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 -
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
-
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 -
-
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?
-
-
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 -
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
-
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....
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