Inquiridor
DropDownList dentro do ListView

Pergunta
-
Galera,
Ainda estou tendo problemas nesse desenvolvimento,
Conseguei fazer o ListView ser exibido com o dropdownlist dentro carregado com alguns valores do banco, mas na hora de salvar o SelectedValue do Dropdownlist ele vem em branco minha conclusão porque isto acontece e:
depois que o meu datasource dos dropdownlist são passados dentro do evento ListView_ItemCreated
dessa forma...
protected void ListView1_ItemCreated(object sender, ListViewItemEventArgs e)
{
ListViewItem item = e.Item;
if (item.ItemType == ListViewItemType.InsertItem)
{
DropDownList ddl = (DropDownList)item.FindControl("ddlPrestadores");
ddl.DataSource = dt;
ddl.DataTextField = "nome_prestador";
ddl.DataValueField = "id_prestador";
ddl.DataBind();
DropDownList ddlClientes = (DropDownList)item.FindControl("ddlClientes");
ddlClientes.DataSource = dtClient;
ddlClientes.DataTextField = "nome_cliente";
ddlClientes.DataValueField = "id_cliente";
ddlClientes.DataBind();
}
}Na primeira vez para exibir a pagina tudo bem, mas quando clico para salvar o registro(coloquei no debug pra ver o que acontece e o event ListView ItemCreate e chamado primeiramente assim associando novamente o datatable para os datasource dos meus drops dai quando eu vou recuperar os valores selcionados mais abaixo do codigo vem vazio..)
O que eu acho que deveria ser feito para dar certo e conseguir recuperar os valores selecionados nos drops são que eles deveriam ser associados ao datasource somente uma vez correto?
Sem acontecer essa interferencia que esta ocorrendo com o evento ItemCreated, mas não achei outra maneira que de certo para preencher os drops
usando esta sequencia.
ListViewItem item = e.Item;
DropDownList ddl = (DropDownList)item.FindControl("ddlPrestadores");Se alguem conseguir me dar uma luz ficarei mto grato.
Todas as Respostas
-
Olá! Bom dia!!
Segue exemplo de como fiz em uma aplicação que usa o listview para editar e adicionar dados, no meu exemplo uso um controle radiobuttonlist, mas é bem similar com o uso de dropdownlist.
Identificar a linha que está em edição:protected void ListView1_ItemEditing(object sender, ListViewEditEventArgs e) // identificar linha que estou editando { ListView1.EditIndex = e.NewEditIndex; }
Setar o valor selecionado quando for insert:protected void ListView1_ItemInserting(object sender, ListViewInsertEventArgs e) { RadioButtonList RBLAtivo; Int16 x; RBLAtivo = (RadioButtonList)ListView1.InsertItem.FindControl("tipo_valorRadioButtonList"); if (RBLAtivo.SelectedValue == "") return; x = Convert.ToInt16(RBLAtivo.SelectedValue); e.Values["tipo_valor"] = x; }
Setar o valor selecionado quando for update do registro:
protected void ListView1_ItemUpdating(object sender, ListViewUpdateEventArgs e) { RadioButtonList RBLAtivo; Int16 x; RBLAtivo = (RadioButtonList)ListView1.EditItem.FindControl("tipo_valorRadioButtonList"); if (RBLAtivo.SelectedValue == "") return; x = Convert.ToInt16(RBLAtivo.SelectedValue); e.NewValues["tipo_valor"] = x; }
Selecionar o valor no radiobuttonlist de acordo com o registro do banco de dados:
protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e) { if (e.Item.ItemType == ListViewItemType.DataItem) // validar se é linha de edição (item) { RadioButtonList rbl = (RadioButtonList)e.Item.FindControl("tipo_valorRadioButtonList"); // convertendo para radiobuttonlist if (rbl != null) { Label lblTemp = (Label)ListView1.Items[ListView3.EditIndex].FindControl("tipo_valor_descLabel"); if (lblTemp.Text.ToUpper() == "TRUE") rbl.SelectedValue = "1"; else rbl.SelectedValue = "2"; } } }
Espero ter lhe ajudado!
Se lhe foi útil, marque como resposta / vote como útil! Obrigado!!Thiago Rogerio
www.thiagorogerio.com.br
thiagorogeriobr@hotmail.com -
Ola,
Eu já tinha pelo evento ItemDataBound mas quando eu vou associar o datasource do meu ddl ao datatable ele da erro
o problema dessa forma e que não consigo instanciar o meu dropdownlist com esse evento tentei dessas duas formas uma esta comentada veja:
Referência de objeto não definida para uma instância de um objeto.
protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
string sDropDown;
ListViewItem item = e.Item;
if (item.ItemType == ListViewItemType.DataItem)
{
//DropDownList ddl = (DropDownList)item.FindControl("ddlPrestadores");
DropDownList ddl = (DropDownList)ListView1.FindControl("ddlPrestadores");
if (ddl != null)
{
//ddl.DataSource = ds.Tables["Prestadores"];
ddl.DataSource = dt;
ddl.DataTextField = "nome_prestador";
ddl.DataValueField = "id_prestador";
ddl.DataBind();
}
sDropDown = ddl.SelectedValue;
DropDownList ddlClientes = (DropDownList)item.FindControl("ddlClientes");
//ddlClientes.DataSource = ds.Tables["Clientes"];
ddlClientes.DataSource = dtClient;
ddlClientes.DataTextField = "nome_cliente";
ddlClientes.DataValueField = "id_cliente";
ddlClientes.DataBind();
}
}Somente deu certo dentro do evento ItemCreated
-
Olá!
Procure o dropdownlist no e.item, conforme exemplo abaixo:DropDownList rbl = (DropDownList)e.Item.FindControl("ddlPrestadores");
Verifique se assim encontra.Thiago Rogerio
www.thiagorogerio.com.br
thiagorogeriobr@hotmail.com -
Também não funcionou,
Antes eu tinha feito isso para diminuir um pouco ListViewItem item = e.Item;
dai comentei e testei como vc falou mas não funcionou..
Não sei porque isso acontece, se eu tentar criar a instancia do drop no evento ItemCreated da certo mas depois quando eu vou salvar o registro na hora de recuperar o SelectedValue ele vem branco
Não esta querendo fazer isso no evento ItemCreated porque acho q o motivo de ele pegar o SelectedValue em branco toda vez e porque depois que clico no botão para inserir o registro o evento ItemCreated e chamado sem ser preciso, assim fazendo associação novamente do datatable ao datasource.
Teria como cancelar a chamada de um evento quando eu quiser??