Você está na página 1de 17

Acesso a Dados: com Wizard (sem escrever cdigo), e Programaticamente

Base de Dados: loja.mdb

Tabelas: Categorias (IdCat, NomeCat) Produtos (IdProd, IdCat, NomeProd, Preco, Stock) Carrinho (IdCliente, IdProd, Quantidade) Clientes (IdCliente, Nome, Morada, Telefone, NIF, BI)

A Visualizao de uma tabela num controlo GridView atravs de Wizard


1. Criar um Web Site (File System Web site) File > New Web Site > ASP.NET Web Site Location: File System Language:Visual C# C:\ . . . \ADO1 OK.

2. Colocar a base de dados (loja.mdb) no directrio App_Data Com o boto direito do rato em cima do directrio App_Data, seleccionar Add Existing Item e em seguida procurar e seleccionar loja.mdb. Depois de colocada, ver o contedo da Base de Dados:

atravs do Server Explorer: na janela Server Explorer (janela que pode ser chamada no menu View, item Server Explorer) expandir Data Connections, loja.mdb, Tables. Surgem as tabelas Carrinho, Categorias, Clientes e Produtos. Para visualizar o contedo de uma tabela com o boto direito do rato em cima do nome da tabela seleccionar Retrieve Data (pode ser necessrio efectuar o Refresh). Os campos dos registo de cada tabela podem ser obtidos expandindo essa tabela. Alternativamente pode fazer duplo clique no ficheiro de base de dados (uso do Microsoft Access).

3. Adicionar um Controlo GridView para mostrar os dados de uma Tabela Nesta pgina vamos mostrar os dados da tabela Produtos. Vamos alterar o nome da pgina (Default.aspx) para ProdutosWizard.aspx: com o boto direito do rato em cima do nome do nome da pgina, na janela Solution Explorer, seleccionmos Rename, e altermos o nome. Para mostrar os dados de uma tabela da base de dados num controlo GridView vamos criar: um controlo data source, que efectua uma ligao base de dados e executa um comando SQL (Select) e retorna os resultados, um controlo GridView para carregar os dados do controlo data source e os mostrar. Estes elementos podem ser adicionados separadamente. No entanto, o modo mais fcil comear por adicionar um controlo GridView, e depois atravs de Wizards criar a ligao base de dados e o objecto data source. Para posicionar o controlo GridView na pgina podemos comear por adicionar pgina, em modo Design, uma tabela de 3 linhas por 3 colunas, fazendo: Table > Insert Table Em seguida adicionmos clula central da tabela (em modo Design) um controlo GridView (existente na ToolBox no grupo Data). Com o cursor em cima da GridView, clicmos na Smart Tag para obter o menu GridView Tasks. Seleccionar Choose Data Source:, e clicar em <New data source >. Escolher como tipo de Data Source Access Database, e OK. Para seleccionar o ficheiro da base de dados premir Browse, seleccionar App_Data, seleccionar loja.mdb e OK. O campo de texto com o nome do ficheiro de base de dados fica preenchido com ~/App_Data/loja.mdb. Premir Next. Para mostrar o contedo da tabela Categorias seleccionar: Specify columns from a table or view, nome da tabela: Produtos colunas: * A instruo SQL mostrada ser: Select * From [Produtos] Premir Next. Podemos testar a ligao base de dados. Premir Finish.

O Wizard criou e configurou um controlo AccessDataSource que incorpora a ligao base de dados e a instruo SQL de interrogao especificada. Ligou o controlo GridView ao controlo AccessDataSource para que o controlo GridView mostre os dados retornados pelo controlo AccessDataSource.

4. Testar a pgina: Premir Ctrl + F5, ou com o boto direito do rato em cima do nome da pgina seleccionar View in Browse.

5. Adicionar Paginao Na vista de Design clicar na Smart Tag, seleccionar Enable Paging. Testar e verificar que o controlo GridView apresenta um rodap com links para nmeros de pginas. Verificar a alterao do cdigo na vista Source: AllowPaging="True".

6. Adicionar Ordenao Na vista de Design clicar na Smart Tag, seleccionar Enable Sorting. Testar e verificar que no controlo GridView os cabealhos das colunas mudaram para links. Verificar a alterao do cdigo na vista Source: AllowSorting="True".

7. Esconder campos da tabela Para esconder a coluna com os valores de IdCat na vista de Design clicar na Smart Tag, seleccionar Edit Columns, em Selected Fields seleccionar IdProd. Surgem as propriedades desta coluna (BoundField properties:). No grupo Behavior mudar a propriedade Visible de True para False. Testar e verificar.

B Criao de uma pgina Master-Detail atravs de Wizard com dois controlos GridView
Nesta pgina vamos mostrar dados de duas tabelas relacionadas - tabela Categorias e tabela Produtos e estabelecer entre elas uma relao master-detail, isto , a tabela Produtos mostra apenas os produtos da categoria seleccionada na tabela Categorias. Para mostrar apenas os produtos da categoria seleccionada vamos ter de criar um comando SQL parametrizado (instruo SELECT com clusula WHERE).

O controlo AccessDataSource ligado tabela dos Produtos conter uma instruo SELECT com clusula WHERE (filtro parametrizado): Select * From [Produtos] Where [IdCat] = ? O modo como este objecto (AccessDataSource) vai buscar o valor do parmetro indicado noutro elemento que vai ser criado - elemento parameter.

1. Acrescentar uma pgina ao Web Site Na janela Solution Explorer, com o boto direito do rato em cima do nome do projecto, seleccionar Add New Item seleccionar Web Form e mudar o nome da pgina para MasteDetailComWizard 2. Adicionar dois controlos GridView para estabelecer o relacionamento MasterDetail Para posicionar os controlos GridView na pgina podemos comear por adicionar pgina, em modo Design, uma tabela de 2 linhas por 2 colunas, fazendo: Table > Insert Table Rows: 2 Columns: 2

Na 1. linha da tabela colocmo dois Labels para os ttulos Categorias: e Produtos:. Na 2. linha colocmos dois controlos GridView, altermos os IDs para gvCategorias (GridView para mostar as categorias) e gvProdutos (GridView para mostar os produtos).

Atravs da Smart Tag do controlo gvCategorias crimos o objecto AccessDataSource: GridView Tasks Choose Data Source: <New data source > Access Database OK. Browse App_Data loja.mdb OK (~/App_Data/loja.mdb) Next Specify columns from a table or view Categorias * (SELECT * FROM [Categorias]) Next Finish

3. Adicionar Seleco GridView gvCategorias A tabela das Categorias vai funcionar como tabela Mestre. Para permitir seleccionar uma linha desta tabela, na vista de Design clicar na Smart Tag, e em GridView Tasks seleccionar Edit Columns. Debaixo de Available Fields abrir o n CommandField, escolher Select e premir Add para o adicionar lista dos SelectedFields. Estes procedimentos criam uma nova coluna da tabela com um CommandField Select. Atravs das propriedades deste CommandField possvel mudar o tipo de boto (link, boto ou imagem), o texto, etc. Tambm possvel mudar a posio desta coluna. Vamos esconder a coluna com os valores de IdCat. Seleccionar IdCat em Selected fields e colocar a propriedade do grupo Behavior Visible a False. Para que ao seleccionar uma linha desta tabela seja possvel determinar a chave do respectivo registo, e para que essa chave seja IdCat, necessrio que o controlo GridView tenha a propriedade DataKeyNames igual a IdCat. Podemos verificar na vista Source desta pgina, que o elemento <asp:GridView> possui o atributo DataKeyNames="IdCat". Tambm podemos verificar na janela Properties desta GridView que a propriedade DataKeyNames tem o valor "IdCat". Este valor foi colocado automaticamente por ser a chave da tabela Categorias que a fonte de dados deste controlo GridView. 4. Configurao da instruo Select parametrizada para mostrar os produtos associados categoria seleccionada A tabela dos produtos vai funcionar como tabela de Detalhes mostrando os produtos da categoria seleccionada. necessria uma instruo SQL diferente da anterior pelo que ser necessrio um segundo objecto AccessDataSource. Atravs da Smart Tag do controlo gvProdutos crimos o objecto AccessDataSource: GridView Tasks Choose Data Source: <New data source > Access Database OK. Browse App_Data loja.mdb OK (~/App_Data/loja.mdb) Next Specify columns from a table or view Produtos * WHERE Column: IdCat Operator: = Source:Control Control ID: gvCategorias Default Value: 1 Add OK (SELECT * FROM [produtos] WHERE [IdCat] = ?) Next Finish

5. Testar a pgina Premir Ctrl + F5, ou com o boto direito do rato em cima do nome da pgina MasterDetailComWizard.aspx seleccionar View in Browse.

C Criao de uma pgina Master-Detail programaticamente (atravs de cdigo) com dois controlos GridView usando DataReader
Muitas aplicaes Web so construdas usando mltiplas camadas, com um ou mais componentes para fornecer acesso aos dados. Vamos criar um objecto (classe DAL Data Access Layer) para usar como fonte de dados para as nossas pginas Web. O modo de acesso aos dados de uma base de dados pode seguir um de dois modelos: Arquitectura Ligada usa o objecto DataReader para retornar os dados seleccionados. Arquitectura Desligada usa o objecto DataSet para receber os dados da base de dados. Vamos usar a arquitectura desligada objecto DataReader. 1. Adicionar uma classe de Acesso a Dados (DAL) ao Web Site Na janela Solution Explorer, com o boto direito do rato em cima do nome do projecto, seleccionar Add New Item seleccionar Class e mudar o nome da classe para DAL.cs. O Visual Studio informa que a classe deve ser colocada no directrio App_Code. Premir Yes. Como vamos usar objectos do namespace System.Data.OleDb devemos importar este package, acresecentando-o lista dos packages j importados:
using using using using using System; System.Collections.Generic; System.Linq; System.Web; System.Data.OleDb;

using System.Data.OleDb; public class DAL { private const string CONN = @"Provider=Microsoft.Jet.OLEDB.4.0;User ID=;"; private const string DBPATH = @"Data Source=|DataDirectory|/loja.mdb"; private OleDbConnection conn = null; private OleDbDataReader dr = null; private void getConnection() { conn = new OleDbConnection(); conn.ConnectionString = CONN + DBPATH; conn.Open(); } public OleDbDataReader getCategorias() { getConnection(); string strSql = "Select * From Categorias"; OleDbCommand cmd = new OleDbCommand(); cmd.CommandText = strSql; cmd.Connection = conn; dr = cmd.ExecuteReader(); return dr; }

public OleDbDataReader getProdutosByIdCategoria(int id) { getConnection(); string strSql = "Select * From Produtos Where IdCat=?"; OleDbCommand cmd = new OleDbCommand(); cmd.CommandText = strSql; cmd.Parameters.AddWithValue("IdCat", id); cmd.Connection = conn; dr = cmd.ExecuteReader(); return dr; } public void closeConnection() { dr.Close(); conn.Close(); } }

2. Acrescentar uma pgina ao Web Site Na janela Solution Explorer, com o boto direito do rato em cima do nome do projecto, seleccionar Add New Item seleccionar Web Form e mudar o nome da pgina para MasterDetailEmCodigoComDataReader. De um modo semelhante pgina anterior adicionar uma tabela com 2 linhas e 2 colunas, colocar na 1. linha os ttulos Categorias e Produtos e na 2. linha dois controlos GridView com os IDs gvCategorias (GridView para mostar as categorias) e gvProdutos (GridView para mostar os produtos). As fontes de dados destes controlos GridView sero criadas programaticamente. A fonte de dados do controlo gvCategorias colocada no mtodo Page_Load da pgina. Este mtodo executado sempre que a pgina chamada, quer seja a 1. vez, quer seja um postback. No entanto s necessrio carregar os dados da Base de Dados para o controlo GridView na 1. invocao da pgina. Depois, sempre que a pgina efectua um postback o controlo GridView mantm os dados.
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { DAL dal = new DAL(); gvCategorias.DataSource = dal.getCategorias(); gvCategorias.DataBind(); dal.closeConnection(); // No esquecer de fechar a ligao } }

Para configurar as colunas do controlo GridView das Categorias: Seleccionar o controlo gvCategorias, premir o smart tag, seleccionar Edit Columns, desmarcar Auto-generate fields, seleccionar BoundField para adicionar uma coluna ligada a um campo da tabela (campo NomeCat), e premir Add. Depois na lista dos Selected fields seleccionar BoundField: aparece a janela das suas propriedades (BoundField properties). Nesta janela, no grupo Data, em DataField colocar o valor NomeCat. Deste modo configurmos o controlo com apenas uma coluna ligada aos dados do campo NomeCat da tabela fonte de dados. No grupo Appearance em HeaderText colocar o cabealho da coluna: Nome da Categoria. Terminmos com OK. Em seguida devemos acrescentar mais uma coluna para permitir seleccionar uma linha desta tabela (procedimentos idnticos ao passo 3 da pgina anterior): clicar na Smart Tag, e em GridView Tasks seleccionar Edit Columns. Debaixo de Available Fields abrir o n Command Field, escolher Select e premir Add para o adicionar lista dos SelectedFields. Ainda, para que ao seleccionar uma linha desta tabela seja possvel determinar a chave do respectivo registo necessrio colocar a propriedade DataKeyNames do controlo GridView com o valor IdCat. Podemos fazer declarativamente ou por cdigo. Declarativamente: seleccionar o controlo GridView, e na janela de propriedades colocar a propriedade DataKeyNames igual a IdCat. Por cdigo: colocar o seguinte cdigo no mtodo Page_load() antes de executar o mtodo DataBind():
gvCategorias.DataKeyNames = new string[]{IdCat};

protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { // string[] a = new string[1]; // a[0] = IdCat; // gvCategorias.DataKeyNames = a; gvCategorias.DataKeyNames = new string[]{IdCat}; DAL dal = new DAL(); gvCategorias.DataSource = dal.getCategorias(); gvCategorias.DataBind(); dal.closeConnection(); // No esquecer de fechar a ligao } }

A fonte de dados do controlo gvProdutos colocada no mtodo que trata o evento resultante da seleco de uma linha da tabela das Categorias. Este mtodo executado sempre que o utilizador selecciona uma linha da tabela das Categorias. Um duplo clique num Select abre o respectivo mtodo de tratamento de eventos, no ficheiro MasterDetailEmCodigoComDataReader.aspx.cs:
protected void gvCategorias_SelectedIndexChanged(object sender, EventArgs e) { int idCat = (int)gvCategorias.SelectedDataKey.Value; // ou equivalente: // int idCat = (int)gvCategorias.SelectedValue; DAL dal = new DAL(); gvProdutos.DataSource = dal.getProdutosByIdCategoria(idCat); gvProdutos.DataBind(); dal.closeConnection(); }

3. Testar a pgina Premir Ctrl + F5, ou com o boto direito do rato em cima do nome da pgina MasterDetailEmCodigoComDataReader.aspx seleccionar View in Browse. 4. Verificar que no possvel colocar paginao com DataReader Se a quantidade de produtos da cada categoria fosse muito elevada e necessitssemos de colocar paginao na GridView que apresenta os produtos, poderamos colocar a propriedade AllowPaging desta GridView a True. Premindo Ctrl + F5, ao seleccionar uma qualquer categoria surge o seguinte erro: The data source does not support server-side data paging.

D Criao de uma pgina Master-Detail programaticamente (atravs de cdigo) com dois controlos GridView usando DataSet
1. Acrescentar mtodos classe DAL para obter dados em DataSet Acrescentar os seguintes mtodos:
public DataSet getDataSetCategorias() { getConnection(); string strSql = "Select * From Categorias"; OleDbCommand cmd = new OleDbCommand(); cmd.CommandText = strSql; cmd.Connection = conn; OleDbDataAdapter da = new OleDbDataAdapter(); da.SelectCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds); return ds; } public DataSet getDataSetProdutosByIdCategoria(int id) { getConnection(); string strSql = "Select * From Produtos Where IdCat=?"; OleDbCommand cmd = new OleDbCommand(); cmd.CommandText = strSql; cmd.Parameters.AddWithValue("IdCat", id); cmd.Connection = conn; OleDbDataAdapter da = new OleDbDataAdapter(); da.SelectCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds); return ds; }

2. Acrescentar uma pgina ao Web Site Na janela Solution Explorer, com o boto direito do rato em cima do nome do projecto, seleccionar Add New Item seleccionar Web Form e mudar o nome da pgina para MasterDetailEmCodigoComDataSet. De um modo semelhante pgina anterior adicionar uma tabela com 2 linhas e 2 colunas, colocar na 1. linha os ttulos Categorias e Produtos e na 2. linha dois controlos GridView com os IDs gvCategorias (GridView para mostar as categorias) e gvProdutos (GridView para mostar os produtos). A fonte de dados do controlo gvCategorias colocada no mtodo Page_Load da pgina. Agora j no necessrio invocar o mtodo closeConnection() porque a

ligao base de dados fechada automaticamente pelo DataAdapter aps preencher o DataSet.
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { gvCategorias.DataKeyNames = new string[]{IdCat}; DAL dal = new DAL(); gvCategorias.DataSource = dal.getDataSetCategorias(); gvCategorias.DataBind(); } }

De um modo semelhante pgina anterior configurar o controlo GridView das Categorias: Desmarcar Auto-generate fields Adicionar uma coluna BoundField ligada ao campo da tabela fonte de dados NomeCat Adicionar outra coluna com um CommandField Select. Duplo clique num Select abre o respectivo mtodo de tratamento de eventos:
protected void gvCategorias_SelectedIndexChanged(object sender, EventArgs e) { int idCat = (int)gvCategorias.SelectedValue; DAL dal = new DAL(); gvProdutos.DataSource = dal.getDataSetProdutosByIdCategoria(idCat); gvProdutos.DataBind(); }

3. Testar a pgina Premir Ctrl + F5, ou com o boto direito do rato em cima do nome da pgina MasterDetailEmCodigoComDataSet.aspx seleccionar View in Browse.

4. Colocar paginao programaticamente (com DataSet) Vamos colocar paginao na GridView que apresenta os produtos. Colocar a propriedade AllowPaging desta GridView a True. Colocar a propriedade PageSize desta GridView com o valor 3. Premindo Ctrl + F5, seleccionando uma categoria, ao mudar de pgina, surge o seguinte erro: The GridView 'gvProdutos' fired event PageIndexChanging which wasn't handled.

Seleccionar a GridView que apresenta os produtos (gvProdutos). Na janela Properties seleccionar o separador Events. Duplo clique no evento PageIndexChanging abre o mtodo de tratamento dos eventos gerados ao clicar numa nova pgina. Colocar o seguinte cdigo:
protected void gvCategorias_SelectedIndexChanged(object sender, EventArgs e) { int idCat = (int) gvCategorias.SelectedValue; ViewState["IdCategoriaSeleccionada"] = idCat; DAL dal = new DAL(); gvProdutos.DataSource = dal.getDataSetProdutosByIdCategoria(idCat); gvProdutos.DataBind(); } protected void gvProdutos_PageIndexChanging(object sender, GridViewPageEventArgs e { gvProdutos.PageIndex = e.NewPageIndex; int id = (int)ViewState["IdCategoriaSeleccionada"]; DAL dal = new DAL(); gvProdutos.DataSource = dal.getDataSetProdutosByIdCategoria(id); gvProdutos.DataBind(); }

5. Testar a pgina Premir Ctrl + F5.

E Actualizar, Inserir, e Apagar (Update, Insert and Delete) programaticamente com o controlo DetailsView
Vamos exemplificar como actualizar, inserir ou remover registos de uma tabela (tabela produtos) usando o controlo Data-bound Web Server (Controlo Servidor Web ligado a dados) DetailsView. 1. Acrescentar uma pgina ao Web Site Add New Item > Web Form e mudar o nome da pgina para ActualizarRegistos.aspx 2. Adicionar um controlo DetailsView Para posicionar o controlo DetailsView na pgina podemos comear por adicionar pgina, em modo Design, uma tabela de 3 linhas por 3 colunas, fazendo: Table > Insert Table Arrastar DetailsView

Smart Tag > Edit Fields Para cada campo da tabela Produtos efectuar o seguinte: em Available Fields: seleccionar BoundField e premir o boto Add para adicionar um campo aos Selected Fields. Este campo apresentar dados ligados a um campo da tabela. Para indicar qual o campo da tabela, nas propriedades do Bound Field, no grupo Data preencher a propriedade DataField. Para escolher uma designao para este campo no grupo Appearence preencher a propriedade Header Text: BoundField BoundField BoundField BoundField BoundField > Properties > Properties > Properties > Properties > Properties > > > > > DataField = IdProd; Header Text = Id do Produto DataField = IdCat; Header Text = Id da Categoria DataField = NomeProd; Header Text = Nome do Produto DataField = Preco; Header Text = Preo DataField = Stock; Header Text = Stock

O BoundField IdProd deve ter a propriedade do grupo Behavior InsertVisible a False para que em modo de insero no parea o campo IdProd. Para carregar os dados da tabela Produtos no controlo DetailsView colocar no mtodo Page_Load o seguinte cdigo:
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { preencherDetailsView(); } } private void preencherDetailsView() { DAL dal = new DAL(); DataSet ds = dal.getDataSetProdutos(); DetailsView1.DataSource = ds; DetailsView1.DataBind(); }

Seleccionar o controlo DetailsView e configurar as seguintes propriedades: No grupo Paging, AllowPaging a True. No grupo Behavior, AutoGenerateDeleteButton, AutoGenerateEditButton, e AutoGenerateInsertButton a True, e AutoGenerateRows a False. No grupo Data, DataKeyNames com o valor IdProd. Nas propridades do Controlo DetailsView seleccionar o separador Events, e no grupo Action efectuar duplo clique sobre PageIndexChanging, ItemDeleting, ItemInserting, ItemUpdating, e ModeChanging. O evento ModeChanging desencadeado quando o controlo DetailsView tenta mudar entre o modo edit, insert ou read-only. A propriedade CurrentMode do controlo DetailsView pode ter 3 valores:
DetailsViewMode.Edit DetailsViewMode.Insert DetailsViewMode.ReadOnly

O mtodo ChangeMode() do controlo DetailsView permite mudar o seu modo. Colocar o seguinte cdigo nos mtodos de tratamento de eventos:

protected void DetailsView1_PageIndexChanging(object sender, DetailsViewPageEventArgs e) { DetailsView1.PageIndex = e.NewPageIndex; preencherDetailsView(); }

protected void DetailsView1_ItemDeleting(object sender, DetailsViewDeleteEventArgs e) { DAL dal = new DAL(); int idProd = Convert.ToInt32(DetailsView1.DataKey.Value); dal.deleteProduto(idProd); preencherDetailsView(); }

protected void DetailsView1_ItemInserting(object sender, DetailsViewInsertEventArgs e) { DAL dal = new DAL(); lerCamposDoRegisto(); dal.insertProduto(idCat, nome, preco, stock); DetailsView1.ChangeMode(DetailsViewMode.ReadOnly); preencherDetailsView(); }

private private private private

int idCat; string nome; double preco; int stock;

private void lerCamposDoRegisto() { idCat = Convert.ToInt32( ((TextBox)DetailsView1.Rows[1].Cells[1].Controls[0]).Text); nome = ((TextBox)DetailsView1.Rows[2].Cells[1].Controls[0]).Text; preco = Convert.ToDouble( ((TextBox)DetailsView1.Rows[3].Cells[1].Controls[0]).Text); stock = Convert.ToInt32( ((TextBox)DetailsView1.Rows[4].Cells[1].Controls[0]).Text); }

protected void DetailsView1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e) { int idProd = Convert.ToInt32(DetailsView1.DataKey.Value); DAL dal = new DAL(); lerCamposDoRegisto(); dal.updateProduto(idProd, idCat, nome, preco, stock); DetailsView1.ChangeMode(DetailsViewMode.ReadOnly); preencherDetailsView(); }

protected void DetailsView1_ModeChanging(object sender, DetailsViewModeEventArgs e) { if (e.NewMode == DetailsViewMode.Edit) DetailsView1.ChangeMode(DetailsViewMode.Edit); else if (DetailsView1.CurrentMode == DetailsViewMode.Edit && e.CancelingEdit) DetailsView1.ChangeMode(DetailsViewMode.ReadOnly); else if (e.NewMode == DetailsViewMode.Insert) DetailsView1.ChangeMode(DetailsViewMode.Insert); else if (DetailsView1.CurrentMode == DetailsViewMode.Insert && e.CancelingEdit) DetailsView1.ChangeMode(DetailsViewMode.ReadOnly); preencherDetailsView(); }

Na classe DAL acrescentar o seguinte cdigo:


public DataSet getDataSetProdutos() { getConnection(); string strSql = "Select * From Produtos"; OleDbCommand cmd = new OleDbCommand(); cmd.CommandText = strSql; cmd.Connection = conn; OleDbDataAdapter da = new OleDbDataAdapter(); da.SelectCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds); return ds; } public int updateProduto(int idProd, int idCat, string nomeProd, double preco, int stock) { getConnection(); string strSql = "Update Produtos SET IdCat=? , NomeProd=? , Preco=? , Stock=? Where IdProd=?"; OleDbCommand cmd = new OleDbCommand(); cmd.CommandText = strSql; cmd.Connection = conn; cmd.Parameters.AddWithValue("IdCat", idCat); cmd.Parameters.AddWithValue("nomeProd", nomeProd); cmd.Parameters.AddWithValue("preco", preco); cmd.Parameters.AddWithValue("stock", stock); cmd.Parameters.AddWithValue("idProd", idProd); int resultado = cmd.ExecuteNonQuery(); conn.Close(); return resultado; } public int insertProduto(int idCat, string nomeProd, double preco, int stock) { getConnection(); string strSql = "Insert Into Produtos (IdCat, NomeProd , Preco , Stock ) values (?,?,?,?)"; OleDbCommand cmd = new OleDbCommand(); cmd.CommandText = strSql; cmd.Connection = conn; cmd.Parameters.AddWithValue("IdCat", idCat); cmd.Parameters.AddWithValue("nomeProd", nomeProd); cmd.Parameters.AddWithValue("preco", preco); cmd.Parameters.AddWithValue("stock", stock); int idProd = cmd.ExecuteNonQuery(); conn.Close(); return idProd; } public int deleteProduto(int idProd) { getConnection(); string strSql = "Delete From Produtos Where IdProd=?"; OleDbCommand cmd = new OleDbCommand(); cmd.CommandText = strSql; cmd.Connection = conn; cmd.Parameters.AddWithValue("idProd", idProd); int resultado = cmd.ExecuteNonQuery(); conn.Close(); return resultado; }

Para informao mais detalhada ver: Mostrar dados de uma base de dados Microsoft Access num controlo GridView:
Walkthrough: Creating a Web Page to Display Access Database Data

Mostrar dados de uma base de dados Microsoft SQL Server num controlo GridView com Ordenao e Paginao:
Walkthrough: Basic Data Access in Web Pages

Trabalhar com registos entre os quais exista uma relao master-detail:


Walkthrough: Creating Master/Detail Web Pages in Visual Studio

Editar e Inserir Registos:


Walkthrough: Editing and Inserting Data in Web Pages with the DetailsView Web Server Control

Criar um componente de acesso a dados e us-lo como fonte de dados numa pgina:
Walkthrough: Data Binding to a Custom Business Object

Tutorial 1: Creating a Data Access Layer


Tutorial 1: Creating a Data Access Layer

Tutorial 2: Creating a Business Logic Layer


Tutorial 2: Creating a Business Logic Layer

Tutorial 3: Master Pages and Site Navigation


Tutorial 3: Master Pages and Site Navigation

Tutorial 16: An Overview of Inserting, Updating, and Deleting Data


Tutorial 16: An Overview of Inserting, Updating, and Deleting Data

ASP.NET Quickstart Tutorials - Binding to Objects


Binding to Objects