Dúvidas DropDownList
06/02/2012
0
Página
protected void Page_Load(object sender, EventArgs e)
{
if( ! IsPostBack)
{
CarregarFamTec();
}
}
private void CarregarFamTec()
{
TipoDAL t = new TipoDAL();
DdlTipo.DataSource = t.FamiliaTec(); //Carrega os dados
DdlTipo.DataValueField = cd_ftc; //Define o conteúdo exibido no campo
DdlTipo.DataTextField = ds_ftc; //Define o valor passado no campo
DdlTipo.DataBind(); //Exibir os dados
DdlTipo.Items.Add(Selecione o Tipo);
DdlTipo.SelectedIndex = DdlTipo.Items.Count - 1;
}
Class Library
public class TipoDAL : DAL
{
public List<Tipo> FamiliaTec()
{
try
{
OpenConnection();
Cmd = new FbCommand(select cd_ftc, ds_ftc from tbfamtecnica where srvprd_ftc = S, Con);
Dr = Cmd.ExecuteReader();
if (Dr.Read()) //Se houver registro na consulta
return Dr.OfType<Tipo>().ToList();
return null;
}
catch
{
return null;
}
finally
{
CloseConnection();
}
}
}
Thiago Garcez
Posts
06/02/2012
Flavia Santos
06/02/2012
Thiago Garcez
Na verdade não, pois ele só irá cair no segundo return null se no if não tiver resultado, fiz debugando ele cai no primeiro return, pois há informaçãoes de qual quer maneira fiz o teste e continou não aparecendo as informações segue abaixo a mudança
try
{
OpenConnection();
Cmd = new FbCommand(select cd_ftc, ds_ftc from tbfamtecnica where srvprd_ftc = S, Con);
Dr = Cmd.ExecuteReader();
return Dr.OfType<Tipo>().ToList();
// if (Dr.Read()) //Se houver registro na consulta
// return Dr.OfType<Tipo>().ToList();
// return null;
eu acho que o erro está aqui ( return Dr.OfType<Tipo>().ToList(); )
desde já obrigado!
06/02/2012
Flavia Santos
Realmente vc tem razão, o IF me passou batido, sorry...
Eu utilizaria um DataTable ao invés de uma Lista.
Eu faria da seguinte forma:
public class TipoDAL : DAL
{
public DataTable Fn_BuscaGrupos(Grupo varGrupo)
{
DataTable DtResult = new DataTable();
var cmd = new SqlCommand(select cd_ftc, ds_ftc from tbfamtecnica where srvprd_ftc = S, Con);
var da = new SqlDataAdapter(cmd);
try
{
OpenConnection();
da.Fill(DtResult);
}
finally
{
cmd.Connection.Close();
da.Dispose();
}
return DtResult;
}
}
Depois apenas linkaria o DataSource do DropDownList com o DataTable retornado:
private void CarregarFamTec()
{
TipoDAL t = new TipoDAL();
DdlTipo.DataSource = t.FamiliaTec();
DdlTipo.DataValueField = cd_ftc;
DdlTipo.DataTextField = ds_ftc;
DdlTipo.DataBind();
DdlTipo.Items.Add(new ListItem(”Selecione o Tipo”,”0”));
DdlTipoSelectedValue = “0”;
}
Lembrando que uma lista é para se utilizar uma lista de valores, exemplo: Lista de Nomes, Id’s de uma tabela, Lista de Cidade, etc porém é apenas uma lista, ela traz “uma coluna” apenas.
Eu utilizo o Sql Server 2008, então os componentes do exemplo são para este banco, antes de testar substitua-os pelos componentes do Firebird (É este o banco que você está usando, certo?)
O código diz no notepad pq aqui to sem visual Studio, se der algum erro posta ai.
06/02/2012
Flavia Santos
Realmente vc tem razão, o IF me passou batido, sorry...
Eu utilizaria um DataTable ao invés de uma Lista.
Eu faria da seguinte forma:
public class TipoDAL : DAL
{
public DataTable FamiliaTec()
{
DataTable DtResult = new DataTable();
var cmd = new SqlCommand(select cd_ftc, ds_ftc from tbfamtecnica where srvprd_ftc = S, Con);
var da = new SqlDataAdapter(cmd);
try
{
OpenConnection();
da.Fill(DtResult);
}
finally
{
cmd.Connection.Close();
da.Dispose();
}
return DtResult;
}
}
Depois apenas linkaria o DataSource do DropDownList com o DataTable retornado:
private void CarregarFamTec()
{
TipoDAL t = new TipoDAL();
DdlTipo.DataSource = t.FamiliaTec();
DdlTipo.DataValueField = cd_ftc;
DdlTipo.DataTextField = ds_ftc;
DdlTipo.DataBind();
DdlTipo.Items.Add(new ListItem(”Selecione o Tipo”,”0”));
DdlTipoSelectedValue = “0”;
}
Lembrando que uma lista é para se utilizar uma lista de valores, exemplo: Lista de Nomes, Id’s de uma tabela, Lista de Cidade, etc porém é apenas uma lista, ela traz “uma coluna” apenas.
Eu utilizo o Sql Server 2008, então os componentes do exemplo são para este banco, antes de testar substitua-os pelos componentes do Firebird (É este o banco que você está usando, certo?)
O código diz no notepad pq aqui to sem visual Studio, se der algum erro posta ai.
06/02/2012
Thiago Garcez
06/02/2012
Thiago Garcez
public DataTable FamiliaTec()
Tenho que dar algum using?
06/02/2012
Flavia Santos
Para usar o DataTable vc deve declarar o using System.Data;
07/02/2012
Thiago Garcez
Ficou assim!
try
{
DataTable DtResult = new DataTable();
OpenConnection();
Cmd = new FbCommand(select cd_ftc, ds_ftc from tbfamtecnica where srvprd_ftc = S, Con);
var da = new FbDataAdapter(Cmd);
da.Fill(DtResult);
return DtResult;
Se possível, qual a diferença ente o DaraRead e o DataAdpter? E o que exatamente faz o da.Fill(DtResult)?
Muito obrigado Pela Ajuda.
07/02/2012
Flavia Santos
Que bom que deu certo.
O Data Reader é um objeto somente leitura e para frente, ou seja, não você não pode navegar aleatoriamente. Ele também trabalha conectado no banco de dados (enquanto estivermos utilizando o Data Reader a conexão com o banco estará aberta), com ele você também pode manipular apenas uma tabela por vez.Sem contar que a conexão deve ser sempre fechada manualmente por você após manipular o Data Reader. A única excessão é quando você utiliza o CommandBehavior.CloseConnection para fechar automaticamente.
O SqlDataAdapter serve como uma ponte entre o DataSet (Um Data Set pode conter vários Data Tables) e o banco de dados.
O método Fill() cria toda a estrutura necessária (tabelas e colunas) para o retorno dos dados.
O Dataset é como um cachê in-memory. Sendo assim todas as tabelas estão disponíveis para você, e ele é uni-direcional, você pode acessar aleatoriamente os dados.
Ele também trabalha totalmente desconectado do banco de dados.
Você pode trabalhar com várias tabelas simultaneamente, além de poder contar com funcionalidades como ordenação, relacionamentos, etc.
07/02/2012
Flavia Santos
Para saber qual o Id do item selecionado no DropDownList vc usaria por exemplo:
Int32 intId = Convert.ToInt32(DdlTipo.SelectedValue);
Com este código vc esta salvando em uma variavel do tipo Int32 o Id do item selecionado no DropDownList.
07/02/2012
Thiago Garcez
Para saber qual o Id do item selecionado no DropDownList vc usaria por exemplo:
Int32 intId = Convert.ToInt32(DdlTipo.SelectedValue);
Com este código vc esta salvando em uma variavel do tipo Int32 o Id do item selecionado no DropDownList.
Bom Flavia consegui obrigado. Agora mais uma dúvida eu vi uma vez um componente é como se fosse essa caixa onde escrevemos, porém em vez de texto ele carregava um monte de check list com várias informações do bd?
Você sabe o nome desta função? Procurei aqui mais não achei
08/02/2012
Flavia Santos
Acho que você está falando do controle CheckBoxList.
Neste controle você pode adicionar itens de forma estática:
<asp:CheckBoxList ID=chkExemplo runat=server>
<asp:ListItem Text=Carro Value=0 />
<asp:ListItem Text=Moto Value=1 />
<asp:ListItem Text=Caminhão Value=2 />
<asp:ListItem Text=Ônibus Value=3 />
</asp:CheckBoxList>
Ou de forma dinâmica através de uma fonte de dados:
<asp:CheckBoxList ID=chkExemplo2 runat=server DataTextField=Descricao DataValueField=Id />
Carregando-o com este código:
foreach(DataRow dr in dt.Rows)
chkExemplo02.Items.Add(new ListItem(dr[“Descricao”].ToString(),dr[“Id”].ToString()));
Onde:
dr é o nome da variável atribuída no foreach indicando a linha da tabela
dt é o nome de uma tabela contendo os dados a serem carregados no seu checkBoxList
Se não for esse o controle, fala ai que eu tento te ajudar,
Flw
27/02/2012
Thiago Garcez
28/02/2012
Thiago Garcez
Ex: Inicio 09:00 fim 22:00
eu precisava que o combo fosse carregado com os horario no intervalo certo.
Ex: 09:00
09:30
10:00
10:30
.....
21:00
22:00
Alguém tem alguma ideia?
Clique aqui para fazer login e interagir na Comunidade :)