none
Pegar o valor de um campo de um SqlDatasource RRS feed

  • Pergunta

  • Colegas
    Tenho um SqlDataSource que alimenta um gridview. Nem todos os campso do SqlDataSource são exibidos no grid, principalmente o campo IDCliente.
    Já vi que não tenho como pegar um campo diretamente do SqlDataSource. Como então posso pegar o valor do campo ID da linha selecionada no grid?
    Preciso passar esse valor para outra página e utilizar o valor no filtro do outro SqlDataSource.
    Obrigado.
    quarta-feira, 27 de maio de 2009 16:34

Respostas

  • veja se ajuda..

    http://www.israelaece.com/post/KeyField-no-GridView.aspx

    Espero ter ajudado, boa sorte! Fábio Morikawa
    quarta-feira, 27 de maio de 2009 16:42
  • Olá Eduardo, td bem ?
    Você consegue pegar o item, através do DataBinder, por exemplo, no evento RowDatABound, você consegue pegar da seguinte forma:

    string valor = DataBinder.Eval(e.Row.DataItem,"NomeDoCampo").ToString();

    ou no evento SelectedIndexChanging,

    string valor = DataBinder.Eval (SeuGridview.Rows(e.NewSelectedIndex).DataItem,"NomeDoCampo").ToString();

    Bem, espero que ajude!
    Um abraço



    Felipe Oriani
    quarta-feira, 27 de maio de 2009 16:55
  • Ou aticionando uma coluna invisível no Grid, que conterá o ID do Cliente no caso, ai quando o cara selecionar você para o valor dessa coluna para onde quiser, segue:

        <asp:datagrid id="gridDefault" runat="server" CssClass="grid" AutoGenerateColumns="False">
            <Columns>
                    <ItemTemplate>
                        <asp:CheckBox Runat="server" id="chkSelecionar" AutoPostBack="False"></asp:CheckBox>
                    </ItemTemplate>
                </asp:TemplateColumn>
                <asp:BoundColumn HeaderText="Código do Cliente" DataField="ID" ></asp:BoundColumn>// Esta coluna no modo design deve ser marcada como Visible FALSE
                <asp:BoundColumn HeaderText="Nome Cliente" DataField="NomeFantasia"></asp:BoundColumn>
            </Columns>
        </asp:datagrid>

    Ai quando for recuperar o valor faça:

           CheckBox chkCorrente = new CheckBox();
    int cliente = 0;        

            string strExcluidos = string.Empty;
            string strNaoExcluidos = string.Empty;

            gridDefault.CurrentPageIndex = 0;

            foreach(DataGridItem item in gridDefault.Items)
            {
                chkCorrente = item.Cells[2].Controls[1] as CheckBox;

                if(chkCorrente.Checked == true)
                {
                   cliente = Convert.ToInt32(item.Cells[3].Text));
                }
            }

    Cássio V1RU5
    quarta-feira, 27 de maio de 2009 17:26
  • Ok
    Deu certo, muito obrigado
    quarta-feira, 27 de maio de 2009 18:56

Todas as Respostas

  • veja se ajuda..

    http://www.israelaece.com/post/KeyField-no-GridView.aspx

    Espero ter ajudado, boa sorte! Fábio Morikawa
    quarta-feira, 27 de maio de 2009 16:42
  • Olá Eduardo, td bem ?
    Você consegue pegar o item, através do DataBinder, por exemplo, no evento RowDatABound, você consegue pegar da seguinte forma:

    string valor = DataBinder.Eval(e.Row.DataItem,"NomeDoCampo").ToString();

    ou no evento SelectedIndexChanging,

    string valor = DataBinder.Eval (SeuGridview.Rows(e.NewSelectedIndex).DataItem,"NomeDoCampo").ToString();

    Bem, espero que ajude!
    Um abraço



    Felipe Oriani
    quarta-feira, 27 de maio de 2009 16:55
  • Ou aticionando uma coluna invisível no Grid, que conterá o ID do Cliente no caso, ai quando o cara selecionar você para o valor dessa coluna para onde quiser, segue:

        <asp:datagrid id="gridDefault" runat="server" CssClass="grid" AutoGenerateColumns="False">
            <Columns>
                    <ItemTemplate>
                        <asp:CheckBox Runat="server" id="chkSelecionar" AutoPostBack="False"></asp:CheckBox>
                    </ItemTemplate>
                </asp:TemplateColumn>
                <asp:BoundColumn HeaderText="Código do Cliente" DataField="ID" ></asp:BoundColumn>// Esta coluna no modo design deve ser marcada como Visible FALSE
                <asp:BoundColumn HeaderText="Nome Cliente" DataField="NomeFantasia"></asp:BoundColumn>
            </Columns>
        </asp:datagrid>

    Ai quando for recuperar o valor faça:

           CheckBox chkCorrente = new CheckBox();
    int cliente = 0;        

            string strExcluidos = string.Empty;
            string strNaoExcluidos = string.Empty;

            gridDefault.CurrentPageIndex = 0;

            foreach(DataGridItem item in gridDefault.Items)
            {
                chkCorrente = item.Cells[2].Controls[1] as CheckBox;

                if(chkCorrente.Checked == true)
                {
                   cliente = Convert.ToInt32(item.Cells[3].Text));
                }
            }

    Cássio V1RU5
    quarta-feira, 27 de maio de 2009 17:26
  • Deu certo
    Muito obrigado
    quarta-feira, 27 de maio de 2009 18:56
  • Ok
    Deu certo, muito obrigado
    quarta-feira, 27 de maio de 2009 18:56
  • Ok
    Muito obrigado
    quarta-feira, 27 de maio de 2009 18:57