Fabio Mans
29/04/2009
Luiz não sei se você já chegou na aula que mostra a página de administração de produtos, neste página é carregado um Drop com as categorias, o que você tem que fazer é a mesma coisa.
Você precisa criar uma método para carregar os dados que precisar, e preencher o Drop. Em seguida definir um DataSource para o drop.
DataSourceID="sqlDsCategory"
<asp:FormView ID="frmAdd" DefaultMode="Insert" DataSourceID="srcProducts" runat="server"
OnItemInserted="frmAdd_ItemInserted" OnItemCommand="frmAdd_ItemCommand">
<InsertItemTemplate>
<asp:Label ID="lblName" Text="Name:" runat="server" AssociatedControlID="txtName" />
<asp:RequiredFieldValidator ID="reqName" ControlToValidate="txtName" Text="(Required)"
ValidationGroup="Add" runat="server" />
<div class="instructions">
Enter the name of the product.
</div>
<asp:TextBox ID="txtName" Text='<%# Bind("Title") %>' runat="server" /> <br />
<br />
<asp:Label ID="lblCategory" Text="Category:" runat="server" AssociatedControlID="drpCategory" />
<asp:RequiredFieldValidator ID="reqCategory" runat="server" ControlToValidate="drpCategory"
ErrorMessage="(Requerid)" InitialValue="Choose a category" ValidationGroup="Add" />
<div class="instructions">
Select a product category.<br />
<asp:DropDownList ID="drpCategory" runat="server" DataSourceID="sqlDsCategory"
DataTextField="Title" DataValueField="CategoryID" SelectedValue='<%# Bind("CategoryID") %>' AppendDataBoundItems="True">
<asp:ListItem Selected="True">Choose a category</asp:ListItem>
</asp:DropDownList><br />
<asp:SqlDataSource ID="sqlDsCategory" runat="server" ConnectionString="<%$ ConnectionStrings:StoreString %>"
SelectCommand="SELECT [CategoryID], [Title] FROM [dev_Categories] ORDER BY [Title]">
</asp:SqlDataSource>
</div>
<br />
<asp:Label ID="lblPrice" Text="Price:" runat="server" AssociatedControlID="txtPrice" />
<asp:RequiredFieldValidator ID="reqPrice" ControlToValidate="txtPrice" Text="(Required)"
Display="Dynamic" ValidationGroup="Add" runat="server" />
<asp:CompareValidator ID="valPrice" ControlToValidate="txtPrice" Text="(Currency)"
Operator="DataTypeCheck" Type="Currency" ValidationGroup="Add" Display="Dynamic"
runat="server" />
<div class="instructions">
Enter the product price.
</div>
<asp:TextBox ID="txtPrice" Columns="5" Text='<%# Bind("Price") %>' runat="server" />
<br style="clear: both" />
<br />
<asp:Label ID="lblDescription" Text="Brief Description (can include HTML):" AssociatedControlID="txtDescription"
runat="server" />
<asp:RequiredFieldValidator ID="reqDescription" ControlToValidate="txtDescription"
Text="(Required)" ValidationGroup="Add" runat="server" />
<div class="instructions">
The brief description appears in the Products.aspx page and in advertisements.
</div>
<asp:TextBox ID="txtDescription" Text='<%#Bind("Description")%>' TextMode="multiLine"
Columns="40" Rows="2" runat="server" /> <br />
<br />
<br />
<asp:Label ID="lblImage" Text="Image:" AssociatedControlID="upImage" runat="server" />
<asp:RequiredFieldValidator ID="reqImage" runat="server" ControlToValidate="upImage"
ValidationGroup="Add">(Required)</asp:RequiredFieldValidator><div class="instructions">
(Optional)Upload a product image from your hard drive.
</div>
<asp:FileUpload ID="upImage" runat="server" FileName='<%# Bind("ImageURL") %>' /> <br />
<div>
</div>
<br />
<asp:Button ID="btnAdd" Text="Add Product" CommandName="Insert" ValidationGroup="Add"
runat="server" />
<asp:Button ID="btnCancel" Text="Cancel" CausesValidation="false" CommandName="Cancel"
runat="server" />
</InsertItemTemplate>
</asp:FormView>
Fabio
GOSTEI 0
Luiz Franco
29/04/2009
Não não cheguei na aula que carrega as categorias para o Drop, qual é o numero da aula que vc fala sobre isso, agora por exemplo se fosse criar um método ou aproveitar alguma classe do Category.cs que carrega a lista de categorias seria algo assim por exemplo
<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="dsCategory"
DataTextField="Title" DataValueField="CategoryID">
</asp:DropDownList>
<asp:ObjectDataSource ID="dsCategory" runat="server"
OldValuesParameterFormatString="original_" SelectMethod="SelectCategory"
TypeName="DevMedia.ECommerce.Category"></asp:ObjectDataSource>
Que eu teria que embutir no codigo
Então eu teria que criar um novo DSource para isto
e nesse DataSource fazer ele enxergar esse metodo da classe Category.cs na guia Select ao configurar o DataSource no ObjectDataSource
/// <summary>
/// Seleciona Todas as Categorias do Banco de Dados
/// </summary>
/// <returns></returns>
[System.ComponentModel.DataObjectMethod(System.ComponentModel.DataObjectMethodType.Select,true)]
public static List<Category> SelectCategory()
{
string Grupo = HttpContext.Current.Request.QueryString["sessao"];
//Inicializar Comando
SqlConnection con = new SqlConnection(_connectionString);
SqlCommand cmd = new SqlCommand("dev_SelectAllCategory", con);
cmd.CommandType = CommandType.StoredProcedure;
//Initialize parameters
cmd.Parameters.AddWithValue("@Grupo", Grupo);
List<Category> results = new List<Category>();
using (con)
{
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
results.Add(new Category(reader));
}
con.Close();
return results;
}
}
Neste caso como eu tinha adaptado este método para sêr selecionado mediante as Categorias - Serviços ou Produtos mediante Request.QueryString do menu SiteMap eu teria que criar um outro método parecido nas classes somente para listar os Serviços e Produtos
Vou passar para vc aqui como esta a minha estrutura atual de dados + procedure para vc entender o que eu to dizendo
CategoryID-Grupo- Title
1
Produtos
Componentes
2
Produtos
Sites Prontos
3
Produtos
Templates
4
Hospedagem
Hospedagem Windows
5
Hospedagem
Hospedagem Streaming
6
Produtos
Web Controls
NULL
NULL
NULL
Como está a minha SProcedure dev_SelectAllCategory agora
ALTER PROCEDURE [dbo].[dev_SelectAllCategory]
(
@Grupo VarChar(150)
)
AS SELECT CategoryID, Title FROM dbo.dev_Categories Where Grupo = @Grupo
ORDER BY Title
SET NOCOUNT ON
RETURN
Ou seja no caso para fazer o que eu quero e o que vc me disse seria então
A)Criar uma procedure parecida com ácima, mas no lugar de mostrar Select CategoryID, Title , mostrar um Select CategoryID, Grupo não usando Where Grupo = @Grupo e order by Grupo (ou ainda no caso utilizar o Select Order By Grupo Group By Grupo
B)Criar um método parecido com
[System.ComponentModel.DataObjectMethod(System.ComponentModel.DataObjectMethodType.Select,true)]
public static List<Category> SelectCategory()
na classe Category.cs para ele enxergar esta nova SP citada na lógica A por exemplo o método poderia sêr Chamado de
public static List<Category> SelectCategoryGrupo() e o Select dele em
(System.ComponentModel.DataObjectMethodType.Select,false)]
definido como false
C)Por fim da mesma forma que foi feito na inserção do mesmo na aula que vc fala e da exemplo de colocar o objetDataSource para categorias na lista do dropdownlist, criar um objet data source a mais nesta area admin para verificar a qual grupo esta categoria irá pertencer, ou ainda já que ele é definido para produtos -> categorias (já definir um hidden ou caixa de texto desabilitada mas com o valor Produtos dentro dele)Isso não tinha lembrado lembrei agora já que o meu site map administrativo tá ássim
Manager > Produtos > Categorias (não necessitaria de uma decisão dropdownlist, pois já pertence á Produtos)
e outro
Manager > Serviços > Categorias (não necessitaria de uma decisão dropdownlist, pois já pertence á Serviços)
è bom refletir acho que tv mais facil do que eu pensava
Mas mesmo assim gostaria que fosse dado um ok sobre se as minhas lógicas acima, caso eu precise se seria isso á sêr feito num caso destes
Fico no aguardo e desde já agradeço
GOSTEI 0
Luiz Franco
29/04/2009
E aproveitando caso no lugar do DropDownList eu quiser usar mesmo o Controle TextBox ou o Controle Hidden da tab standard, como eu já deixaria ou no objeto hidden ou no objeto textbox o valor por exemplo "Produtos" já setado e pronto para sêr gravado sem que eu tivesse a necessidade de escrevê-lo na pagina fico no aguardo e desde já agradeço
GOSTEI 0
Fabio Mans
29/04/2009
Olá eu utilizo bastante o Hidden, é bem simples.
hdfValor.Value = "seuvalor"
Assim você recupera no momento certo, era esta a dúvida? Acho que não é muito simples.
GOSTEI 0
Luiz Franco
29/04/2009
Olá Fabio Galante mas no caso aí como eu faço para mudar esta linha
<asp:TextBox ID="txtGrupo" runat="server" Text='<%# Bind("Grupo") %>'
ontextchanged="txtGrupo_TextChanged" />
para o HiddenField já com o valor ex:Produtos para sêr reconhecido na adição ou na inserção do mesmo valor em <%# Bind("Grupo") %>
Fico no aguardo e desde já agradeço
GOSTEI 0
Fabio Mans
29/04/2009
Recupera o valor através do Hidden no TextChange, tira o bind.
GOSTEI 0
Luiz Franco
29/04/2009
Teria um exemplo de como eu fazer isso no source e no codigo ou seja como o HIDDEN ficaria no source e como o Bind receberia o dado na base de dados
GOSTEI 0
Fabio Mans
29/04/2009
Você já utilizou o Hidden? É bom simples
string valor = hdfID.Value;
Só isso.
GOSTEI 0
Luiz Franco
29/04/2009
Olá Fabio Galante não sei pq mas baseado no source abaixo não sei se estou fazendo corretamente
<custom:WebWindow ID="winAdd" runat="server" Hide="true" ShowCloseButton="False"
Style="left: 23px; top: 459px" WindowTitleText="Adicionar Categoria">
<asp:FormView ID="frmAdd" runat="server" DefaultMode="Insert"
DataSourceID="dsCategory" oniteminserted="frmAdd_ItemInserted">
<InsertItemTemplate>
Grupo:
<asp:TextBox ID="txtGrupo" runat="server" Text='<%# Bind("Grupo") %>'
ontextchanged="txtGrupo_TextChanged" />
<asp:HiddenField ID="hdfID" runat="server" Value="Produtos" />
<br />
Title:
<asp:TextBox ID="txtTitle" runat="server" Text='<%# Bind("Title") %>' />
<br />
<asp:RequiredFieldValidator ID="reqTitle" runat="server"
ControlToValidate="txtTitle" ValidationGroup="Add" ErrorMessage="(Requerido)"></asp:RequiredFieldValidator>
<br />
<br />
<asp:Button ID="InsertButton" ValidationGroup="Add" runat="server" CausesValidation="True"
CommandName="Insert" Text="Insert" />
<asp:Button ID="InsertCancelButton" runat="server"
CausesValidation="False" CommandName="Cancel" Text="Cancel" />
</InsertItemTemplate>
</asp:FormView>
</custom:WebWindow>
e no evento textchange do texbox txtGrupo como abaixo não sei pq ele não reconhece os valores para o txtGrupo e para sêr gravado na base de dados e no caso como eu faria para retornar o valor do campo hiddenfield ou até do string valor que tb não está sendo reconhecido para o bind.value para que ele grava-se o dado valor = "Produtos" na base de dados do dsCategory abaixo o evento e o datasource
protected void txtGrupo_TextChanged(object sender, EventArgs e)
{
//string valor = "Produtos";
string valor = hdfID.Value;
}
datasource
<asp:ObjectDataSource ID="dsCategory" runat="server" DeleteMethod="DeleteCat"
InsertMethod="Insert"
SelectMethod="SelectCategory" TypeName="WebProdutos.ECommerce.Category">
<DeleteParameters>
<asp:Parameter Name="CategoryId" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="grupo" Type="String" />
<asp:Parameter Name="title" Type="String" />
</InsertParameters>
</asp:ObjectDataSource>
Aqui o code-behind completo
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Manager_Category_Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void frmEdit_ItemUpdated(object sender, FormViewUpdatedEventArgs e)
{
//Carrega aps Update no FormView
//O GridView atualizado
grdCategories.DataBind();
}
protected void grdCategories_SelectedIndexChanged(object sender, EventArgs e)
{
winEdit.Hide = false;
}
protected void frmEdit_ItemCommand(object sender, FormViewCommandEventArgs e)
{
winEdit.Hide = true;
}
protected void frmAdd_ItemInserted(object sender, FormViewInsertedEventArgs e)
{
grdCategories.DataBind();
}
protected void txtGrupo_TextChanged(object sender, EventArgs e)
{
//string valor = "Produtos";
string valor = hdfID.Value;
}
}
Fico no aguardo e desde já agradeço
GOSTEI 0
Fabio Mans
29/04/2009
Conseguiu resolver?
GOSTEI 0
Luiz Franco
29/04/2009
Não ainda não consegui resolver
A minha duvida consiste em como utilizando o Hidden Fiel, colocando como valor "Produtos" como assim que eu o inserir tb faço no code-behind para que ele seja gravado na base de dados ou class como explicada em sua aula?
Ou seja como baseado já nas minhas duvidas anteriores deveria ficar o source.aspx da pagina admin de cadastro de categorias e o code-behind da mesma para sêr gravada em sua base com hidden field o valor do Grupo = "Produtos"?
Fico no aguardo e desde já agradeço
GOSTEI 0
Fabio Mans
29/04/2009
Desculpa mas não estou mais entendendo sua dúvida. Você consegue dar um print em uma tela do que precisa?
GOSTEI 0
Luiz Franco
29/04/2009
Aqui está o PrintScreen da Tela
GOSTEI 0
Luiz Franco
29/04/2009
Aqui está o PrintScreen da Tela
GOSTEI 0
Luiz Franco
29/04/2009
Aqui está o PrintScreen da Tela
GOSTEI 0
Luiz Franco
29/04/2009
Me Desculpe mas não sei pq razão sem querer foi enviado tres vezes o Print Screen da Tela
Mas o que eu preciso saber é como no Lugar do Campo Grupos aparecer para na caixa de Texto eu colocar o valor Produtos para ele gravar no bind eu colocar o HIDDEN-Field já com o valor "Produtos" e para ele gravar na base de dados do campo grupo ou seja como do mesmo jeito do ex. do texbox
Fico no aguardo e desde já agradeço
GOSTEI 0
Fabio Mans
29/04/2009
Sinceramente não entendi, você tem o TextBox Grupo, e quer que ele pegue o valor do hidden?
GOSTEI 0
Luiz Franco
29/04/2009
O que eu gostaria é que fosse ocultado o texbox Grupo e no lugar fosse usado o HiddenField com o valor já determinado como "Produtos" e gravado este dado no banco de dados, só que aí não sei o procedimento correto no source ou code behind em relação ao Bind, para que eu substituí-se o textbox Grupo pelo hidden-field e este grava-se o valor "Produtos" por exemplo
Se precisar tenho uma forma de comunicação melhor caso se interesse para nós interargirmos por Acesso Remoto com o uso do Logmein-free para eu ti demonstrar o que precisaria se se interessar no proximo post me passe um ok e eu ti passo o link do logmein-free
GOSTEI 0
Devmedia
29/04/2009
Luiz,
não é aconselhavel definir outro meio de comunicação do que a nossa consultoria. Uma solução para q vc possa demonstrar claramente o que deseja é através de um video que vc mesmo pode gravar utilizando o camtasia, por exemplo. Temos um video explicativo na home da consultoria de como fazer isso.
GOSTEI 0
Luiz Franco
29/04/2009
Ok irei então providenciar o video, caso até lá não tenha respondida minha duvida fico no aguardo e desde já agradeço
GOSTEI 0
Luiz Franco
29/04/2009
Olá Fabio, fui vêr como abrir um Chamado com Video aqui no DevMedia, mas vi que só pode sêr feito com O CAMTASIA STUDIO 5.1 ou superior entrei nos dois sites para bx. o trial mas o valor dele após 30 dias é US$ 299,00 como pd observar nos links abaixo, o que torna inviavel a utilização do mesmo para uma boa parte de iniciantes e desenvolvedores que ainda não o tenham
http://superdownloads.uol.com.br/download/130/camtasia-studio/
http://store.techsmith.com/buy/camtasia
Esse software poderá ser utilizado sem limitações de funcionalidades durante 30 dias. Ao término desse período, para continuar a fazer uso do mesmo, este poderá ser adquirido através do site do desenvolvedor por US$299,00
e que já está na versão 6.0
Já o uso do Windows Media Encoder é free apesar do formato dele sêr wmv o que é reconhecido pelo Silverlight eu sugiro que adaptem para que as pessoas insiram o video no formato wmv recuperando a pagina em silverlight se não fica inviavel já que nem sei se todas as funcionalidades por exemplo exportação em flv está suportada nesta versão trial
infelizmente isso hoje tá me impossibilitando de enviar tal video
Fico no aguardo e desde já agradeço
GOSTEI 0
Devmedia
29/04/2009
Luiz,
vc pode usar qualquer programa que capture a tela. existem vários que são gratuitos, por exemplo: www.nchsoftware.com/capture/index.html
GOSTEI 0
Luiz Franco
29/04/2009
Como me foi pedido estou respondendo o chamado com o video dividido em duas partes
[#VIDEO-120#]
GOSTEI 0
Fabio Mans
29/04/2009
Não consegui abrir o vídeo.
Vamos tentar novamente.
Você tem dois textbox.
Grupo: ________________
Categoria:_____________
Aqui um botão <Enviar>
O que você quer fazer?
GOSTEI 0
Luiz Franco
29/04/2009
Sem o Hidden Field
Grupo:<# Eval(Bind)_>________ - Aqui eu tenho que digitar ou "Produtos" ou "Serviços"
Title:<#Eval(Bind)>__________
<Enviar>
Com o Hidden Field
Hidden Field: <#Eval(Bind) > Value = "Produtos" (ou "Serviços"mas sempre fixo dependendo de que pagina eu estiver e invisivel ao usuário ele já assume o valor Produtos, eu apenas digito o title e ele já insere na categoria apropriada, só que ainda não entendi pelo meu source como eu o coloco para gravar no campo Grupo via Hidden-Field (enfim aonde eu coloco o valor "Produtos" e o <# Eval(Bind) > no mesmo objeto pra ele assumir o valor "Produtos" teria como me mostrar como ficaria no source dentro do Form View como ficaria isso é isso que eu ainda não entendi, me desculpe
Fico no aguardo e desde já agradeço
GOSTEI 0
Fabio Mans
29/04/2009
Primeiro no seu select tem este valor Produtos?
Exemplo
SELECT GRUPO, NOMEDOGRUPO, IDPRODUTOS FROM TESTE
Caso sim, você pode até converter para Template e adicionar manualmente o nome dos campos.
Text = <%# Eval("GRUPO") %>
Text = <%# Eval("NOMEDOGRUPO") %>
MeuHidden.Value = <%# Eval("IDPRODUTOS ") %>
Quando for salvar recupere o ID que está no Hidden
Fabio
Sem o Hidden Field
Grupo:<# Eval(Bind)_>________ - Aqui eu tenho que digitar ou "Produtos" ou "Serviços"
Title:<#Eval(Bind)>__________
<Enviar>
Com o Hidden Field
Hidden Field: <#Eval(Bind) >
Value = "Produtos" (ou "Serviços"mas sempre fixo dependendo de que
pagina eu estiver e invisivel ao usuário ele já assume o valor
Produtos, eu apenas digito o title e ele já insere na categoria
apropriada, só que ainda não entendi pelo meu source como eu o coloco
para gravar no campo Grupo via Hidden-Field (enfim aonde eu coloco o
valor "Produtos" e o <# Eval(Bind) > no mesmo objeto pra ele
assumir o valor "Produtos" teria como me mostrar como ficaria no source
dentro do Form View como ficaria isso é isso que eu ainda não entendi,
me desculpe
Fico no aguardo e desde já agradeço
GOSTEI 0
Devmedia
29/04/2009
Luiz,
a resposta dada pelo consultor resolveu sua dúvida? podemos encerrar o chamado?
GOSTEI 0
Devmedia
29/04/2009
Luiz,
por falta de retorno estamos mudando o status do seu chamado para concluído. caso tnha mais duvidas sobre o assunto aqui tratato, por favor, post aqi mesmo q o consultor voltará a lhe atender.
GOSTEI 0
Luiz Franco
29/04/2009
O que estou usando e que é chamado no source dsCategory, baseado na classe category.cs é esta parte da classe e a procedure
dev_SelectAllCategory (para consulta)
metodo usado na classe category.cs
[System.ComponentModel.DataObjectMethod(System.ComponentModel.DataObjectMethodType.Select,true)]
public static List<Category> SelectCategory()
{
string Grupo = HttpContext.Current.Request.QueryString["sessao"];
//Inicializar Comando
SqlConnection con = new SqlConnection(_connectionString);
SqlCommand cmd = new SqlCommand("dev_SelectAllCategory", con);
cmd.CommandType = CommandType.StoredProcedure;
//Initialize parameters
cmd.Parameters.AddWithValue("@Grupo", Grupo);
List<Category> results = new List<Category>();
using (con)
{
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
results.Add(new Category(reader));
}
con.Close();
return results;
}
}
PROCEDURE dev_SelectAllCategory
ALTER PROCEDURE [dbo].[dev_SelectAllCategory]
(
@Grupo VarChar(150)
)
AS SELECT CategoryID, Title FROM dbo.dev_Categories Where Grupo = @Grupo
ORDER BY Title
SET NOCOUNT ON
RETURN
e
para o metodo Insert na mesma classe
[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Insert, true)]
public static void Insert(string grupo, string title)
{
//Initialize command
SqlConnection con = new SqlConnection(_connectionString);
SqlCommand cmd = new SqlCommand("dev_CategoryInsert ", con);
cmd.CommandType = CommandType.StoredProcedure;
//Initialize parameters
cmd.Parameters.AddWithValue("@Grupo", grupo);
cmd.Parameters.AddWithValue("@Title", title);
using (con)
{
con.Open();
cmd.ExecuteNonQuery();
}
con.Close();
}
procedure dev_CategoryInsert
ALTER PROCEDURE [dbo].[dev_CategoryInsert]
(
@Grupo NVarchar(150),
@Title NVarchar(150)
)
AS
INSERT dev_Categories
(
Grupo,
Title
)
VALUES
(
@Grupo,
@Title
)
Source.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Home.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Gerenciamento_Categorias_Default" ViewStateEncryptionMode="Always" EnableViewStateMac="true" ValidateRequest="true" %>
<%@ Import Namespace="DevMedia" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentCenter" Runat="Server">Categorias<div style="padding: 15px">
Use this page to manage product categories. You can add new product categories,
delete categories and edit existing categories.
</div>
<div style="width: 700px">
<div style="float: left; margin-right: 10px; padding: 10px; border-left: solid 1px white;
height: 410px;"><asp:GridView ID="grdCategories" runat="server"
AutoGenerateColumns="False" DataSourceID="dsCategory"
DataKeyNames="CategoryID"
onselectedindexchanged="grdCategories_SelectedIndexChanged">
<Columns>
<asp:TemplateField ControlStyle-BackColor="#91070A" FooterStyle-BackColor="#91070A" ItemStyle-BackColor="#91070A">
<HeaderTemplate>
Ao
</HeaderTemplate>
<ItemTemplate>
<asp:LinkButton ID="lnkEdit" runat="server" CommandName="Select">Editar</asp:LinkButton>
<asp:Label ID="lblBarra" runat="server" ForeColor="White" Text=" / "></asp:Label>
<asp:LinkButton ID="lnkDelete" runat="server" CommandName="Delete"
onclientclick="return confirm('Voc tem Certeza que deseja excluir esta Categoria?')">Deletar</asp:LinkButton>
</ItemTemplate>
<ControlStyle BackColor="#91070A"></ControlStyle>
<FooterStyle BackColor="#91070A"></FooterStyle>
<ItemStyle BackColor="#91070A"></ItemStyle>
</asp:TemplateField>
<asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
</Columns>
</asp:GridView>
<custom:WebWindow ID="winEdit" Hide="true" WindowTitleText="Editar Categoria" runat="server">
<asp:FormView ID="frmEdit" runat="server" DataSourceID="dsCategoryUpdate"
DefaultMode="Edit" onitemupdated="frmEdit_ItemUpdated"
onitemcommand="frmEdit_ItemCommand">
<EditItemTemplate>
Title:
<asp:TextBox ID="txtTitle" runat="server" Text='<%# Bind("Title") %>'
ValidationGroup="Edit" />
<br />
<asp:RequiredFieldValidator ID="reqTitle" runat="server"
ControlToValidate="txtTitle" ValidationGroup="Edit">(Requerido)</asp:RequiredFieldValidator>
<br />
<br />
<asp:Button ID="UpdateButton" runat="server" CausesValidation="True"
CommandName="Update" Text="Update" ValidationGroup="Edit" />
<asp:Button ID="UpdateCancelButton" runat="server" CausesValidation="False"
CommandName="Cancel" Text="Cancel" ValidationGroup="Edit" />
</EditItemTemplate>
</asp:FormView>
</custom:WebWindow>
<custom:OpenWebWindow ID="lnkAdd" runat="server"
Text="Adicionar Categoria" WebWindowID="winAdd" ForeColor="#91070A" />
<br />
<custom:WebWindow ID="winAdd" runat="server" Hide="true" ShowCloseButton="False"
Style="left: 23px; top: 459px" WindowTitleText="Adicionar Categoria">
<asp:FormView ID="frmAdd" runat="server" DefaultMode="Insert"
DataSourceID="dsCategory" oniteminserted="frmAdd_ItemInserted">
<InsertItemTemplate>
Grupo:
<asp:TextBox ID="txtGrupo" runat="server" Text='<%# Bind("Grupo") %>' //É aqui que quero substituir pelo hidden com valor = produtos
ontextchanged="txtGrupo_TextChanged" />
<asp:HiddenField ID="hdfID" runat="server" Value="Produtos" />
<br />
Title:
<asp:TextBox ID="txtTitle" runat="server" Text='<%# Bind("Title") %>' />
<br />
<asp:RequiredFieldValidator ID="reqTitle" runat="server"
ControlToValidate="txtTitle" ValidationGroup="Add" ErrorMessage="(Requerido)"></asp:RequiredFieldValidator>
<br />
<br />
<asp:Button ID="InsertButton" ValidationGroup="Add" runat="server" CausesValidation="True"
CommandName="Insert" Text="Insert" />
<asp:Button ID="InsertCancelButton" runat="server"
CausesValidation="False" CommandName="Cancel" Text="Cancel" />
</InsertItemTemplate>
</asp:FormView>
</custom:WebWindow>
<asp:ObjectDataSource ID="dsCategory" runat="server" DeleteMethod="DeleteCat"
InsertMethod="Insert"
SelectMethod="SelectCategory" TypeName="Devmedia.ECommerce.Category">
<DeleteParameters>
<asp:Parameter Name="CategoryId" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="grupo" Type="String" />
<asp:Parameter Name="title" Type="String" />
</InsertParameters>
</asp:ObjectDataSource>
<br />
<asp:ObjectDataSource ID="dsCategoryUpdate" runat="server"
SelectMethod="SelecById"
TypeName="DevMedia.ECommerce.Category" UpdateMethod="Update">
<UpdateParameters>
<asp:ControlParameter ControlID="grdCategories" Name="CategoryID" />
</UpdateParameters>
<SelectParameters>
<asp:ControlParameter ControlID="grdCategories" Name="CategoryID"
PropertyName="SelectedValue" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
</div></div>
</asp:Content>
Fico no aguardo e desde já agradeço
GOSTEI 0
Fabio Mans
29/04/2009
Será somente 1 categoria o retorno ou várias?
Quando for 1 você retorna um objeto caso contrário uma lista e faz o bind.
Fabio
GOSTEI 0
Luiz Franco
29/04/2009
Olá Fabio Galante
Bem vou tentar simplificar - para vc entender o que eu preciso, caso possa me fazer um video explicando o que preciso para eu entender melhor talvez facilite
Tenho o seguinte source que está dentro de um form view
<asp:FormView ID="frmAdd" runat="server" DefaultMode="Insert"
DataSourceID="dsCategory" oniteminserted="frmAdd_ItemInserted">
<InsertItemTemplate>
Grupo:
<asp:TextBox ID="txtGrupo" runat="server" Text='<%# Bind("Grupo") %>'
ontextchanged="txtGrupo_TextChanged" />
<br />
Title:
<asp:TextBox ID="txtTitle" runat="server" Text='<%# Bind("Title") %>' />
<br />
<asp:RequiredFieldValidator ID="reqTitle" runat="server"
ControlToValidate="txtTitle" ValidationGroup="Add" ErrorMessage="(Requerido)"></asp:RequiredFieldValidator>
<br />
<br />
<asp:Button ID="InsertButton" ValidationGroup="Add" runat="server" CausesValidation="True"
CommandName="Insert" Text="Insert" />
<asp:Button ID="InsertCancelButton" runat="server"
CausesValidation="False" CommandName="Cancel" Text="Cancel" />
</InsertItemTemplate>
</asp:FormView>
Os dados do mesmo são gravados ou inseridos no seguint datasource
<asp:ObjectDataSource ID="dsCategory" runat="server" DeleteMethod="DeleteCat"
InsertMethod="Insert"
SelectMethod="SelectCategory" TypeName="MyApp.ECommerce.Category">
<DeleteParameters>
<asp:Parameter Name="CategoryId" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="grupo" Type="String" />
<asp:Parameter Name="title" Type="String" />
</InsertParameters>
</asp:ObjectDataSource>
O que eu quero saber é no form view do source como faço para no lugar de inserir um dado no textbox do txtGrupo como abaixo, dentro de InsertItemTemplate
<asp:TextBox ID="txtGrupo" runat="server" Text='<%# Bind("Grupo") %>'
ontextchanged="txtGrupo_TextChanged" />
eu utilizar um HiddenField no lugar neste mesmo source e no mesmo template onde o valor á ser gravado por padrão na base de dados campo grupo, do campo Hidden (do source) no Bind("Grupo") já fosse "Produtos" por exemplo, a minha duvida é como substituir este com hiddem no lugar de txtGrupo ácima para obter o mesmo efeito do cadastro no datasource mas com valor atribuido já para "Produtos"
Fico no aguardo e desde já agradeço
GOSTEI 0
Fabio Mans
29/04/2009
Você diz?
<asp:HiddenField ID="HiddenField1" runat="server" Value='<%# Bind("Grupo") %>' />
GOSTEI 0
Luiz Franco
29/04/2009
Olá Fabio Galante
<asp:HiddenField ID="HiddenField1" runat="server" Value='<%# Bind("Grupo") %>' />
sim seria isso mas como faço para o Value='<%# Bind("Grupo") %>' ácima para sêr reconhecida na base de dados, campo Grupo do DataSource, já como Produtos por exemplo, mas seguindo o raciocínio ácima
Fico no aguardo e desde já agradeço
GOSTEI 0
Fabio Mans
29/04/2009
Mas você chegou a testar? Com o Bind ele recupera.
Fabio
GOSTEI 0
Luiz Franco
29/04/2009
Não ainda não tive tempo de testar pois ainda estou com duvidas
por exemplo pelo que entendi para fz aquilo que eu quero no source do .aspx tenho que colocar essa linha para gravar no data source como aconteceria se fosse dropdown ou textbox correto?
<asp:HiddenField ID="HiddenField1" runat="server" Value='<%# Bind("Grupo") %>' />
Agora no caso acima como o Bind, reconhecerá o valor "Produtos", no datasource, na hora que for dado o postback do botão de envio de dados do source da pagina do formview é esta a minha duvida ainda que persiste
se fosse possivel me fazer um video sobre isso caso a duvida continue persistindo talvez me facilita-se já que pelo video do curso utilizando o text box eu entendi mas não estou conseguindo entender utilizar o hiddem já com um valor setado para o datasource reconhecer usando hidden como acima se facilitar com video eu fico no aguardo e desde já agradeço
GOSTEI 0
Fabio Mans
29/04/2009
Luiz por favor, teste tudo que te passei antes de eu fazer mais exemplos, não adianta eu ficar criando novas instruções se você não testou, veja realmente se com o que mostramos até agora resolve o seu problema.
Abraços
GOSTEI 0
Luiz Franco
29/04/2009
Olá Fabio Galante - Bom dia
Fiz o teste como mostrado abaixo
<custom:WebWindow ID="winAdd" runat="server" Hide="true" ShowCloseButton="False"
Style="left: 23px; top: 459px" WindowTitleText="Adicionar Categoria">
<asp:FormView ID="frmAdd" runat="server" DefaultMode="Insert"
DataSourceID="dsCategory" oniteminserted="frmAdd_ItemInserted">
<InsertItemTemplate>
<asp:HiddenField ID="hdfID" runat="server" Value='<%# Bind("Grupo") %>' />
<br />
Title:
<asp:TextBox ID="txtTitle" runat="server" Text='<%# Bind("Title") %>' />
<br />
<asp:RequiredFieldValidator ID="reqTitle" runat="server"
ControlToValidate="txtTitle" ValidationGroup="Add" ErrorMessage="(Requerido)"></asp:RequiredFieldValidator>
<br />
<br />
<asp:Button ID="InsertButton" ValidationGroup="Add" runat="server" CausesValidation="True"
CommandName="Insert" Text="Insert" />
<asp:Button ID="InsertCancelButton" runat="server"
CausesValidation="False" CommandName="Cancel" Text="Cancel" />
</InsertItemTemplate>
</asp:FormView>
</custom:WebWindow>
<asp:ObjectDataSource ID="dsCategory" runat="server" DeleteMethod="DeleteCat"
InsertMethod="Insert"
SelectMethod="SelectCategory" TypeName="DevMedia.ECommerce.Category">
<DeleteParameters>
<asp:Parameter Name="CategoryId" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="grupo" Type="String" />
<asp:Parameter Name="title" Type="String" />
</InsertParameters>
</asp:ObjectDataSource>
Testei Só que a base de dados deu erro entendendo que ao campo grupo não foi dado nenhum valor ou seja o Dado "Produtos" no HiddenField ácima, é isto que ainda não entendi como eu faço utilizando da forma ácima para que seja inserido no campo grupo via hidden-field pelo Value='<%# Bind("Grupo") %>' o dado "Produtos" no DataSource, conforme o source ácima, enfim o que estaria faltando no source ácima para que ele reconhece-se este dado?
Fico no aguardo e desde já agradeço
GOSTEI 0
Fabio Mans
29/04/2009
Onde está a informação do Grupo? Ele vem de um drop por exemplo?
Está faltando definir este parâmetro.
Fabio
GOSTEI 0
Luiz Franco
29/04/2009
Olá Fabio Galante
Não ela não vem do Drop ela teria que vir, caso vc possa me dar os 2 exemplos ela poderia vir de duas formas
A)Embutida na pagina (neste caso seria em algum lugar do codigo da pagina?Se for como seria este exemplo?)
B)Via QueryString como abaixo
Categorias/Default.aspx?sessao=Produtos&subsessao=Categorias&LogadoFirefox=Admin&nivel=FF2
(no caso como também seria baseado neste segundo exemplo?)
Fico no aguardo e desde já agradeço
GOSTEI 0
Fabio Mans
29/04/2009
A)Embutida na pagina (neste caso seria em algum lugar do codigo da pagina?Se for como seria este exemplo?)
Não pode ser ViewState se for a mesma página ou session?
B) Dentro de Parameters do ObjectDataSource você configura informando que será via QueryString.
Fabio
GOSTEI 0
Luiz Franco
29/04/2009
Olá Fabio Galante
A)Embutida na pagina (neste caso seria em algum lugar do codigo da pagina?Se for como seria este exemplo?)
Não pode ser ViewState se for a mesma página ou session?
B) Dentro de Parameters do ObjectDataSource você configura informando que será via QueryString.
Relativo as respostas A e B do qual me passou teria como me passar um exemplo via source ou codigo relativo á cada item para eu saber como ficaria essa adaptação
Fico no aguardo e desde já agradeço
GOSTEI 0
Fabio Mans
29/04/2009
Como utilizar Session?
private void Button1_Click(object sender, System.EventArgs e)
{
Session["name"] = TextBox1.Text;
Session["email"] = TextBox2.Text;
Server.Transfer("anotherwebform.aspx");
}
Para ViewState é paracido.
Query string no ObjectDataSource
<SelectParameters>
<asp:QueryStringParameter DefaultValue="1" Name="ID" QueryStringField="id"
Type="Int32" />
</SelectParameters>
Luiz por favor, teste os exemplos.
GOSTEI 0
Luiz Franco
29/04/2009
Olá Fabio Galante
pelo que entendi...
Colocando esta linha no insert parameters do objeto data source não preciso usar o hiddenfield
<asp:QueryStringParameter DefaultValue="1" Name="ID" QueryStringField="id"
Type="Int32" />
tipo seria algo assim
<asp:FormView ID="frmAdd" runat="server" DefaultMode="Insert"
DataSourceID="dsCategory" oniteminserted="frmAdd_ItemInserted">
<InsertItemTemplate>
<asp:HiddenField ID="hdfID" runat="server" Value='<%# Bind("Grupo") %>' />
<br />
Title:
<asp:TextBox ID="txtTitle" runat="server" Text='<%# Bind("Title") %>' />
<br />
<asp:RequiredFieldValidator ID="reqTitle" runat="server"
ControlToValidate="txtTitle" ValidationGroup="Add" ErrorMessage="(Requerido)"></asp:RequiredFieldValidator>
<br />
<br />
<asp:Button ID="InsertButton" ValidationGroup="Add" runat="server" CausesValidation="True"
CommandName="Insert" Text="Insert" />
<asp:Button ID="InsertCancelButton" runat="server"
CausesValidation="False" CommandName="Cancel" Text="Cancel" />
</InsertItemTemplate>
</asp:FormView>
</custom:WebWindow>
<asp:ObjectDataSource ID="dsCategory" runat="server" DeleteMethod="DeleteCat"
InsertMethod="Insert"
SelectMethod="SelectCategory" TypeName="DevMedia.ECommerce.Category">
<DeleteParameters>
<asp:Parameter Name="CategoryId" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:QueryStringParameter DefaultValue="Produtos" Name="grupo" QueryStringField="grupo"
Type="String" />
substituindo-se ao de baixo <asp:Parameter Name="grupo" Type="String" /> e não precisando do objeto o hiddenfield ácima <asp:HiddenField ID="hdfID" runat="server" Value='<%# Bind("Grupo") %>' /> que está denfro do formview frmAdd, retirando-o da pagina
<asp:Parameter Name="grupo" Type="String" />
<asp:Parameter Name="title" Type="String" />
</InsertParameters>
</asp:ObjectDataSource>
Fico no aguardo e desde já agradeço
GOSTEI 0
Fabio Mans
29/04/2009
Sim é uma opção por QueryString, mas esta informação deve estar na QueryString.
GOSTEI 0
Luiz Franco
29/04/2009
Tipo seria algo assim no http da pagina
http://localhost:1308/WebProdutos/manager/Categorias/Default.aspx?id=Produtos
e no source no insertparameters
<asp:QueryStringParameter DefaultValue="1" Name="ID" QueryStringField="id"
Type="Int32" />
Ou apenas mudar o valor
<asp:QueryStringParameter DefaultValue="Produtos" Name="Grupo" QueryStringField="id"
Type="String" />
já seria o suficiente
GOSTEI 0
Fabio Mans
29/04/2009
Isso mesmo, deu certo?
GOSTEI 0
Luiz Franco
29/04/2009
Olá Fabio Galante
Fiz deste jeito baseado nos exemplos que vc me retornou e deu certo
<custom:OpenWebWindow ID="lnkAdd" runat="server"
Text="Adicionar Categoria" WebWindowID="winAdd" ForeColor="#91070A" />
<br />
<custom:WebWindow ID="winAdd" runat="server" Hide="true" ShowCloseButton="False"
Style="left: 23px; top: 459px" WindowTitleText="Adicionar Categoria">
<asp:FormView ID="frmAdd" runat="server" DefaultMode="Insert"
DataSourceID="dsCategory" oniteminserted="frmAdd_ItemInserted">
<InsertItemTemplate>
<br />
Title:
<asp:TextBox ID="txtTitle" runat="server" Text='<%# Bind("Title") %>' />
<br />
<asp:RequiredFieldValidator ID="reqTitle" runat="server"
ControlToValidate="txtTitle" ValidationGroup="Add" ErrorMessage="(Requerido)"></asp:RequiredFieldValidator>
<br />
<br />
<asp:Button ID="InsertButton" ValidationGroup="Add" runat="server" CausesValidation="True"
CommandName="Insert" Text="Insert" />
<asp:Button ID="InsertCancelButton" runat="server"
CausesValidation="False" CommandName="Cancel" Text="Cancel" />
</InsertItemTemplate>
</asp:FormView>
</custom:WebWindow>
<asp:ObjectDataSource ID="dsCategory" runat="server" DeleteMethod="DeleteCat"
InsertMethod="Insert"
SelectMethod="SelectCategory" TypeName="DevMedia.ECommerce.Category">
<DeleteParameters>
<asp:Parameter Name="CategoryId" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="grupo" DefaultValue="Produtos" Type="String" />
<asp:Parameter Name="title" Type="String" />
</InsertParameters>
</asp:ObjectDataSource>
Agora no caso abaixo o QueryStringField também teria que ter o valor = Grupo e não id?
<asp:QueryStringParameter DefaultValue="Produtos" Name="Grupo" QueryStringField="id"
Type="String" />
E aproveitando a deixa já que da forma ácima o mesmo já deu certo se fosse utilizado no Template de Edição ou Update seria o parameter usado da mesma forma que feito no insert ou seja
<asp:Parameter Name="grupo" DefaultValue="Produtos" Type="String" />
dentro do Template Edit e datasource dsCategoryUpdate abaixo ou somente seria necessário apenas no template do datasource de inserção como já resolvido ácima
<custom:WebWindow ID="winEdit" Hide="true" WindowTitleText="Editar Categoria" runat="server">
<asp:FormView ID="frmEdit" runat="server" DataSourceID="dsCategoryUpdate"
DefaultMode="Edit" onitemupdated="frmEdit_ItemUpdated"
onitemcommand="frmEdit_ItemCommand">
<EditItemTemplate>
Title:
<asp:TextBox ID="txtTitle" runat="server" Text='<%# Bind("Title") %>'
ValidationGroup="Edit" />
<br />
<asp:RequiredFieldValidator ID="reqTitle" runat="server"
ControlToValidate="txtTitle" ValidationGroup="Edit">(Requerido)</asp:RequiredFieldValidator>
<br />
<br />
<asp:Button ID="UpdateButton" runat="server" CausesValidation="True"
CommandName="Update" Text="Update" ValidationGroup="Edit" />
<asp:Button ID="UpdateCancelButton" runat="server" CausesValidation="False"
CommandName="Cancel" Text="Cancel" ValidationGroup="Edit" />
</EditItemTemplate>
</asp:FormView>
</custom:WebWindow>
Data source dsCategoryUpdate
<asp:ObjectDataSource ID="dsCategoryUpdate" runat="server"
SelectMethod="SelecById"
TypeName="DevMedia.ECommerce.Category" UpdateMethod="Update">
<UpdateParameters>
<asp:ControlParameter ControlID="grdCategories" Name="CategoryID" />
</UpdateParameters>
<SelectParameters>
<asp:ControlParameter ControlID="grdCategories" Name="CategoryID"
PropertyName="SelectedValue" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>Fico no aguardo e desde já agradeço
GOSTEI 0
Fabio Mans
29/04/2009
Quando você monta o DataSource via assistente ele mostra todas as opções para você, basta ir informando os parâmetros, perceba que ele tem uma caixa com todas as opções, sessão, querystring e outras. Isso para o CRUD.
Fabio
GOSTEI 0
Luiz Franco
29/04/2009
Ah ok vou rever as aulas qdo vc monta os object data source para visualizar isto, mas ainda bem que deu certo..pode fechar este post como concluido e qualquer outra nova duvida em relação á ele caso precise futuramente eu reabro ok
Obrigadão no próximo post eu ti passo o feedback como concluido
GOSTEI 0