none
GridView - DropDownList como Parametro para outro RRS feed

  • Pergunta

  • Ola, postei essa dúvida lá no forum de ASP.NET, mas não obtive ajuda.
    Estou colocando aqui, quem sabe alguem sabe como resolver.

    preciso popular um dropdown dentro do gridview, em função de outro que tb esta dentro do grid.

    exemplo:

    no grid tenho uma coluna SECRETARIAS, e outra DEPARTAMENTOS.

    Eu Preciso que ao selecionar a secretaria, a drop departamentos seja preenchida somente com os departamentos da secretaria selecionada no drop anterior.

    O problema é que no sqldatasource ou no objectdatasource, no método select qdo eu vou passar o parametro, não aparece o controle dropdwn de secretarias, aparece apenas o gridview.

    E dessa forma o drop de departamentos me traz todos os departamentos, independente da secretaria que eu escolho.

    Eu pensei em uma 2ª alternativa, que seria colocar um label FORA do grid, e atribuir o valor da coluna secretaria do grid para esse label.

    Então eu passararia para o drop de departamentos dentro do grid, o label como parametro.

    o prolema é q não estou conseguindo passar o valor secretarias do grid para o label, alguem sabe como fazer??

    ou então me indicar uma solução para os drop dentro do grid.


    EDIT
    ia esquecendo, o projeto é Web com C#.
    abraço

    Douglas

     



    sexta-feira, 17 de julho de 2009 19:09

Respostas

Todas as Respostas

  • Douglas, já fiz isso mas utilizei o evento SelectedIndexChanged (quando alterarem o primeiro combo) do dropdown, via código dentro dele alterei a propriedade SelectCommand  do sqldatasource, ou melhor ainda, alterar somente a propriedade SelectParameters via método Add, para isso deve utilizar um select indicando parâmeetros na propriedade SelectCommand, se preferir o primeiro jeito é mais fácil se nunca usou parâmetros, se tiver dúvida para fazer isso, te gero e passo o trecho de código.
    domingo, 19 de julho de 2009 18:06
  • Lênin Cristi

    Se pude me passar o trecho do código, só para eu tomar como base, e adaptar para o meu código.

    abraço

    Douglas
    domingo, 19 de julho de 2009 22:14
  • Douglas, criei um projeto, mas entendi errado seu post, seu combo em cascata está dentro de um gridview fiz pensando outra coisa, mas agora que entendi seu problema, achei o que você precisa, e já tem os exemplos (está em vb, se tiver dificuldade com a linguagem avise):

    http://mikepope.com/blog/fun/cascadingdropdowns_gridview.aspx
    • Sugerido como Resposta Drunk Charizard sexta-feira, 24 de julho de 2009 18:33
    • Marcado como Resposta Douglas Luiz domingo, 26 de julho de 2009 16:41
    sexta-feira, 24 de julho de 2009 18:33
  • Grande Lênin, era exatamente isso, valeu pelo link.

    cara eu tenho muita dificuldade para entender VB hehehe, sinceramente não consigo mesmo fazer a conversao para C#, se vc ou alguem que ler o tópico puder me ajudar na conversão, acho q o unico trecho em VB é esse abaixo:

    Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e _
            As System.Web.UI.WebControls.GridViewRowEventArgs)
        If (e.Row.RowState And DataControlRowState.Edit) = _
                DataControlRowState.Edit Then
            Dim dv As System.Data.DataRowView = e.Row.DataItem
        
            ' Preselect correct value in Manufacturers list
            Dim listManufacturers As DropDownList = _
                e.Row.FindControl("listManufacturers")
            listManufacturers.SelectedValue = dv("ManufacturerID")
    
    
            ' Databind list of models in dependent drop-down list
            Dim listModels As DropDownList = _
                e.Row.FindControl("listModels")
            Dim dsc As AccessDataSource = _
                e.Row.FindControl("dsModelsByManufacturer")
            dsc.SelectParameters("ManufacturerID").DefaultValue = _
                dv("ManufacturerID")
            listModels.DataBind()
            listModels.SelectedValue = dv("ModelID")
        End If
    End Sub
    abraço e muito obrigado
    domingo, 26 de julho de 2009 16:41
  • Tenta isso (fiz num ambiente separado,pode ter uma ou outra diferença, use "using System.Data;" ):

    protected
    void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
    if(e.Row.RowState == DataControlRowState.Edit)
    {
    DataRowView dv = (DataRowView)e.Row.DataItem;
    DropDownList listManufacturers = (DropDownList)e.Row.FindControl("listManufacturers");
    listManufacturers.SelectedValue = (
    string)dv.Row["ManufacturerID"];
    DropDownList listModels = (DropDownList)e.Row.FindControl("listModels");
    AccessDataSource dsc = (AccessDataSource)e.Row.FindControl("dsModelsByManufacturer");
    dsc.SelectParameters.Add(
    "ManufacturerID",(string)dv.Row["ManufacturerID"]);
    listModels.DataBind();
    listModels.SelectedValue = (
    string)dv.Row["ModelID"];
    }
    }
    domingo, 26 de julho de 2009 17:26