1. ADO1
Visual Studio 2008
New Web Site: ADO1 em C:UtilizadorsFernando2009-2010ARQSITP6
1 – Arrastar para App_Data o ficheiro loja.mdb
2 – Add New Item … WebForm DataReaderProg.aspx
- Acesso à base de dados por código – programaticamente
- Uso do objecto DataReader para ler uma tabela da base de dados
- Apresenta a tabela Categorias num GridView
Controlos: Label: Acesso à Base de Dados por código
GridView
Necessário acrescentar: using System.data.OleDb;
private const string CONN =
@"Provider=Microsoft.Jet.OLEDB.4.0;User ID=;";
private const string DBPATH =
@"Data Source=|DataDirectory|/loja.mdb";
protected void Page_Load(object sender, EventArgs e)
{
string strConn = CONN + DBPATH;
OleDbConnection conn =
new OleDbConnection(strConn);
conn.Open();
OleDbCommand cmd = new OleDbCommand();
string strSql = "Select * From Categorias";
cmd.Connection = conn;
cmd.CommandText = strSql;
OleDbDataReader dataReader = cmd.ExecuteReader();
GridView1.DataSource = dataReader;
GridView1.DataBind();
dataReader.Close();
conn.Close();
}
3 - Add New Item … WebForm DataReaderProg2.aspx
- Acesso à base de dados por código
- Uso do objecto DataReader para ler uma tabela da base de dados
- Apresenta a tabela Categorias num DropDownList e num RadioButtonList
Controlos: DropDownList
RadioButtonList
2. . . .
string strSql = "Select * From Categorias";
cmd.Connection = conn;
cmd.CommandText = strSql;
OleDbDataReader dataReader = cmd.ExecuteReader();
RadioButtonList1.DataSource = dataReader;
RadioButtonList1.DataTextField = "Nomecat";
RadioButtonList1.DataValueField = "IdCat";
RadioButtonList1.DataBind();
dataReader.Close();
dataReader = cmd.ExecuteReader();
DropDownList1.DataSource = dataReader;
DropDownList1.DataTextField = "Nomecat";
DropDownList1.DataValueField = "IdCat";
DropDownList1.DataBind();
dataReader.Close();
conn.Close();
}
}
4 - Master-Detail em 2 páginas
Add New Item … WebForm DataReaderProg3.aspx
- Acesso à base de dados por código
- Uso do objecto DataReader para ler uma tabela da base de dados
- Apresenta a tabela Categorias numa lista de hyperlinks colocados num objecto
Panel. Cada hyperlink invoca uma página com os produtos da cada categoria.
Controlos: Label: Iteracção sobre um DataReader para criação de hyperlinks
Panel: Panel1
. . .
string strSql = "Select * From Categorias";
cmd.Connection = conn;
cmd.CommandText = strSql;
OleDbDataReader dataReader = cmd.ExecuteReader();
while (dataReader.Read()) {
HyperLink hyperLink = new HyperLink();
hyperLink.Text = dataReader.GetString(1);
// hyperLink.Text = (string) dataReader["NomeCat"];
hyperLink.NavigateUrl =
"Produtos.aspx?idCat=" + dataReader.GetInt32(0);
Panel1.Controls.Add(hyperLink);
Panel1.Controls.Add(new LiteralControl("<p />"));
}
3. dataReader.Close();
conn.Close();
2.ª Página: Produtos.aspx
Label: Produtos da Categoria: [Label2]
GridView
HyperLink: Text: Voltar
NavigatURL: ~/DataReaderProg3.aspx
try {
int idCat = int.Parse(Request.QueryString["idCat"]);
string strConn = CONN + DBPATH;
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
OleDbCommand cmd = new OleDbCommand();
string strSql1 =
"Select NomeCat From Categorias Where IdCat=" + idCat;
cmd.Connection = conn;
cmd.CommandText = strSql1;
OleDbDataReader dataReader = cmd.ExecuteReader();
string nomeCat ="";
if (dataReader.Read()) nomeCat =
dataReader.GetString(0);
dataReader.Close();
Label2.Text = nomeCat;
string strSql2 =
"Select * From Produtos Where IdCat=" + idCat;
cmd.CommandText = strSql2;
dataReader = cmd.ExecuteReader();
GridView1.DataSource = dataReader;
GridView1.DataBind();
dataReader.Close();
conn.Close();
}
catch (System.Exception) {
Response.Redirect("DataReaderProg3.aspx");
}
Master-Detail em 2 páginas
Base de Dados: loja.mdb
Tabelas: Categorias (IdCat, NomeCat)
Produtos (IdProd, IdCat, NomeProd, Preco, Stock)
4. 5 – Master-Detail numa única página sem DAL, lista de links + GridView
Add New Item … WebForm MasterDetailSemDAL.aspx
- Acesso à base de dados por código
- Uso do objecto DataReader para ler uma tabela da base de dados
- Apresenta a tabela Categorias numa lista de hyperlinks colocados num objecto
Panel. Cada hyperlink invoca a própria página com os produtos da cada categoria.
Tabela 2x2
Categorias: Produtos:
Painel com hyperlinks GridView
6 – Master-Detail numa única página com DAL, lista de links + GridView
- Acesso à base de dados por código
- Uso do objecto DataReader para ler uma tabela da base de dados
- Apresenta a tabela Categorias numa lista de hyperlinks colocados num objecto Panel.
Cada hyperlink invoca a própria página com os produtos da cada categoria.
Add New Item … WebForm MasterDetailComDAL.aspx
Add New Item … Class DAL.cs
Sim, colocar no folder App_Code
Tabela 2x2
Categorias: Produtos:
Painel com hyperlinks GridView
7 – Master-Detail numa única página com DAL, usando DataSet e lista de links +
GridView
Add New Item … WebForm MasterDetailDataSetComDAL.aspx
- Acesso à base de dados por código
- Uso do objecto DataReader para ler uma tabela da base de dados
- Apresenta a tabela Categorias num GridView, tendo cada linha um hyperlink
Seleccionar. Cada hyperlink invoca a própria página com os produtos da cada categoria.
8 – Master-Detail numa única página com DAL, usando 2 GridViews
Add New Item … WebForm MasterDetail2GridView.aspx
- Acesso à base de dados por código
- Uso do objecto DataReader para ler uma tabela da base de dados
5. - Apresenta a tabela Categorias num GridView, tendo cada linha um hyperlink
Seleccionar. Cada hyperlink invoca a própria página com os produtos da cada categoria.
Tabela 2x2
Categorias: Produtos:
GridView GridView
GridView1:
EditColumns …
Desseleccionar (desmarcar) Auto-generate fields
(AutoGenerateColumns = false)
BoundField > DataField = NomeCat
Não é necessário>> BoundField > DataField = IdCat e Visible = False
CommandField (Select) Select: Button Type = Link
ShowSelectButton = True
Em Properties: DataKeyNames = IdCat
Duplo clique no hyperlink Select abre o método
GridView1_SelectedIndexChanged(…, …)
Têm de ser especificadas chaves de dados na GridView 'GridView1' antes de ser
possível obter as chaves de dados seleccionadas. Utilize a propriedade DataKeyNames
para especificar chaves de dados.
9 – Master-Detail numa única página com DAL, usando 2 GridViews, com criação
de uma nova coluna no DataSet
Add New Item … WebForm MasterDetail2GridViewCriaColuna.aspx
- Acesso à base de dados por código
- Uso do objecto DataSet para ler uma tabela da base de dados
Página obtida por cópia da página MasterDetail2GridView.aspx.
Rename para MasterDetail2GridViewCriaColuna.aspx.
Edição do ficheiro MasterDetail2GridViewCriaColuna.aspx:
no cabeçalho alterado em Inherits (1):
CodeFile="MasterDetail2GridViewCriaColuna.aspx.cs"
Inherits="MasterDetail2GridViewCriaColuna"
Edição do ficheiro MasterDetail2GridViewCriaColuna.aspx.cs: no nome da classe (1):
public partial class MasterDetail2GridViewCriaColuna : ...
6. ficheiro MasterDetail2GridViewCriaColuna.aspx.cs:
protected void GridView1_SelectedIndexChanged(
object sender, EventArgs e)
{
DAL dal = new DAL();
int idCat = (int)GridView1.SelectedDataKey.Value;
DataSet ds =
dal.getDataSetProdutosByIdCategoriaAdicionaColuna(idCat);
GridView2.DataSource = ds;
GridView2.DataBind();
dal.closeConnection();
}
DAL.cs:
public DataSet
getDataSetProdutosByIdCategoriaAdicionaColuna(int idCat)
{
getConnection();
OleDbCommand cmd = new OleDbCommand();
string strSql =
"Select * From Produtos Where IdCat=?";
cmd.Connection = conn;
cmd.CommandText = strSql;
cmd.Parameters.AddWithValue("idCat", idCat);
OleDbDataAdapter da = new OleDbDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds, "Produtos");
// criacao de uma coluna nova no dataSet
DataColumn dc = new DataColumn("Valor Total");
dc.Expression = "Preco * Stock";
ds.Tables[0].Columns.Add(dc);
return ds;
}
10 –