none
Usando Foreach para salvar GridView em database RRS feed

  • Pergunta

  • Boa tarde pessoal. 

    Eu tenho um gridview com ItemTemplates  com os seguintes atributos?

    <Columns>
                    <asp:TemplateField HeaderText="Pedido">
                        <ItemTemplate>
                            <asp:Label ID="lblPedidoID" runat="server" Text='<%# Eval("Pedido") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="ProdutoID" Visible="False">
                        <ItemTemplate>
                            <asp:Label ID="lblProdutoID" runat="server" Text='<%# Eval("ProdutoID") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Produto">
                        <ItemTemplate>
                            <asp:Label ID="lblProduto" runat="server" Text='<%# Eval("Produto") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Qtde">
                        <ItemTemplate>
                            <asp:Label ID="lblQtde" runat="server" Text='<%# Eval("Quantidade") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Custo">
                        <ItemTemplate>
                            <asp:Label ID="lblCusto" runat="server" Text='<%# Eval("Custo") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Total">
                        <ItemTemplate>
                            <asp:Label ID="lblTotal" runat="server" Text='<%# Eval("Total") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>

    Estou tentando usar o Foreach (GridViewRow row in GridView1.Rows) para recuperar os items do GridView e assim salva-lo como um todo no banco de dados.

    foreach (GridViewRow row in GridView1.Rows)
                {
    
                var pedidoid = row.Cells[0].Text.Trim();
                var produtoid = row.Cells[1].Text.Trim();
                var qtde = row.Cells[3].Text.Trim();
                var preco = row.Cells[4].Text.Trim();
                var total = row.Cells[5].Text.Trim();
    
                var produto = (from p in db.Produtos
                               where p.ProdutoID == int.Parse(produtoid)
                               select p).SingleOrDefault();
                
                
                            
                    DetalhesPedido dp = new DetalhesPedido
                    {
                        PedidoID = Convert.ToInt32(pedidoid),
                        ProdutoID = Convert.ToInt32(produtoid),
                        Qtde = Int32.Parse(qtde),
                        Preco = Decimal.Parse(preco),
                        Total = Decimal.Parse(total),
                    };
                    db.DetalhesPedidos.InsertOnSubmit(dp);
                    db.SubmitChanges();
                    
            }

    Eu estou usando Linq to SQL para no exemplo acima. Mas o Insert não acontece. O que pode estarr havendo?

    segunda-feira, 27 de outubro de 2014 16:14

Respostas

  • Pessoal, Consegui. 

    Pensei que poderia ser apenas no evento RowDataBound, mas adaptei para o onClick. Eu precisava identificar o tipo de linha:

    if (row.RowType == DataControlRowType.DataRow)
                {
                    Label pedidoid = row.FindControl("lblPedidoID") as Label;
                    Label produtoid = row.FindControl("lblProdutoID") as Label;
                    Label qtde = row.FindControl("lblQtde") as Label;
                    Label preco = row.FindControl("lblCusto") as Label;
                    Label total = row.FindControl("lblTotal") as Label;
    
                    int Pedidoid = Convert.ToInt32(pedidoid.Text);
                    int Produtoid = Convert.ToInt32(produtoid.Text);
                    int Qtde = Convert.ToInt32(qtde.Text);
                    decimal Preco = Convert.ToDecimal(preco.Text);
                    decimal Total = Decimal.Parse(total.Text);
    
                    var produto = (from p in db.Produtos
                                   where p.ProdutoID == Convert.ToInt32(produtoid.Text)
                                   select p).SingleOrDefault();
    
    
    
                    DetalhesPedido dp = new DetalhesPedido
                    {
                        PedidoID = Pedidoid,
                        ProdutoID = Produtoid,
                        Qtde = Qtde,
                        Preco = Preco,
                        Total = Total,
                    };
                    db.DetalhesPedidos.InsertOnSubmit(dp);
                    db.SubmitChanges();

    Assim consegui colocar o código para funcionar

    • Marcado como Resposta Claudio Moura segunda-feira, 27 de outubro de 2014 16:56
    segunda-feira, 27 de outubro de 2014 16:55