none
Montar DataTable com GridView RRS feed

  • Pergunta

  • Olá

    Tenho uma Gridview .Uma coluna  é populada no evento RowDataBound , pois se trata da soma de duas outras colunas , preciso usar o filter do DataView para que busque ( ex : somente linhas onde essa coluna de soma seja maior que 5).Portanto , não posso criar uma DataView a partir do DataTable , pois nele a coluna de soma ainda não está populada. Queria então criar a DataView a partir da GridView. Existe um método do tipo Clone, Copy...enfim...preciso de uma dica Grato

    segunda-feira, 20 de setembro de 2010 16:26

Respostas

Todas as Respostas

  • por que vc nao coloca a formula direto no seu datatable ? segue uma ideia:

    DataTable dt = new DataTable();
          dt.Columns.Add("nome", typeof(string));
          dt.Columns.Add("v1", typeof(int));
          dt.Columns.Add("v2", typeof(int));
          dt.Columns.Add("v3",typeof(int));
          dt.Columns["v3"].Expression = "v1 + v2";
    
          dt.Rows.Add(new object[] { "valor 1", 1, 1 });
          dt.Rows.Add(new object[] { "valor 2", 2, 4 });
          dt.Rows.Add(new object[] { "valor 3", 15, 6 });
          dt.Rows.Add(new object[] { "valor 4", 100, 150 });
    
    segunda-feira, 20 de setembro de 2010 17:04
  • Olá Olavo ,

    Meu DataTable está recebendo o retorno de um DataSet .Para eu fazer como vc me propos , eu teria que percorrer todo o dataTable , adicionando linha por linha? É isso mesmo?

    segunda-feira, 20 de setembro de 2010 18:29
  • SqlConnection conn = new SqlConnection("Data Source=M1256341;Initial Catalog=Entites;Integrated Security=True");
          conn.Open();
          SqlDataAdapter dta = new SqlDataAdapter("select 1,1", conn);
          DataSet ds = new DataSet();
          dta.Fill(ds);
          ds.Tables[0].Columns.Add("calculado", typeof(int), "Column1 + Column2");
          var a = ds.Tables[0].Rows[0][2];
    

    o exemplo abaixo modifica as colunas em tempo de execução de um dataset depois de ter recebido deu m banco de dados, pode ser que lhe ajude no que vc quer

     

    segunda-feira, 20 de setembro de 2010 19:33
  • pq vc ja nao tras essa soma da sua consulta pronto para seu datatable
    • Marcado como Resposta Eduardo Eiji segunda-feira, 20 de setembro de 2010 20:56
    segunda-feira, 20 de setembro de 2010 19:39
  • Ué..pq não pensei nisso antes....a minha grid contém 55 colunas...buscando dados de várias tabelas ,e logo pensei q no rowdatabound , já que não tenho os dados gravados , porém posso calcular no select do sql....valeu por abrir a mente , Senhores Seilor e Olavo....valeu!!!!

    segunda-feira, 20 de setembro de 2010 20:56
  • Seilor , tem um porém..Na verdade não é uma simples soma , é uma média , e portanto preciso validar se não vou realizar divisão por ZERO , no evento rowdatabound é simples....no select tb consigo fazer ?

    segunda-feira, 20 de setembro de 2010 21:06
  • Então....preciso validar se a operação(não é somente uma soma) , é uma média ....portanto tenho q validar para não fazer divisão por ZERO.
    segunda-feira, 20 de setembro de 2010 21:07
  • sim, é possivel embutir formulas matematicas bem complexas na query, segue um pequeno exemplo:

    create table #valores(val1 int, val2 int, val3 int)
    GO
    insert into #valores
    values(1,2,3),(2,4,5),(5,6,7),(10,20,30),(16,17,19),(60,0,3)
    GO
    select * from #valores 
    GO
    select val1,val2,val3, val1+val2+val3/3 [Média], 
    case when val2=0 then (val1+val3) 
    	 when val2>0 then (val1+val3)/val2 end [calculo] from #valores
    
    
    segunda-feira, 20 de setembro de 2010 22:57