.NET - Carregando uma lista de países sem usar um banco de dados

 Se você precisa carregar uma lista de países em um controle de lista como um controle Combobox em uma aplicação Windows Forms ou em um DropDownList em uma aplicação ASP .NET e faz isso usando um banco de dados, saiba que podemos fazer isso usando apenas as classes do namespace System.Globalization da plataforma .NET.

O namespace System.Globalization contém classes que definem informações relacionadas à cultura, incluindo idioma, país/região, os calendários em uso, os padrões de formatação para datas, moeda e números e a classificação do pedido para seqüências de caracteres.

Essas classes são úteis para escrever aplicativos globalizados. Classes como StringInfo e TextInfo fornecem funcionalidades de globalização avançadas, incluindo suporte substituto e processamento de elemento de texto.

Dentre as classes e enumerações do namespace System.Globalization destacamos a seguir as que iremos usar neste artigo:

Classe/Enumeração Descrição
CultureInfo  Fornece informações sobre uma cultura específica (chamada uma localidade para o desenvolvimento de código não gerenciado). As informações incluem os nomes para a cultura, o sistema de gravação, o calendário usado, e a formatação de datas e cadeias de caracteres do tipo.
RegionInfo Contém informações sobre o país/região.
CultureTypes Define os tipos de listas de cultura que podem ser recuperadas usando o método CultureInfo.GetCultures.
Calendar Representa o tempo em divisões como, por exemplo, semanas, meses e anos.

Neste artigo eu vou mostrar como podemos usar os recursos do namespace System.Globalization  para preencher um DropDownlist em uma aplicação ASP .NET e um controle Combobox em uma aplicação Windows Forms usando a linguagem C# e a versão VB .NET.

Recursos usados

Criando o projeto ASP .NET Web Forms

Abra o  Visual Studio 2013 Express for web e clique em New Web Site;

 

A seguir selecione o template Visual C# -> Web -> ASP .NET Web Application e informe o nome AspNet_ListaPaises e clique no botão OK;

 

 

Selecione o template Empty, marque o item Web Forms e clique em OK;

 

 

A seguir clique no menu PROJECT e em Add New Item;

 

Selecione o template Web Form e informe o nome Default.aspx e clique no botão Add;

 

 

Agora inclua um componente DropDownlist na página Default.aspx e defina o seu ID como ddlPaises. Veja abaixo leiaute da página e o código gerado:

 

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Aspnet_ListaPaises.Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Paises</title>
</head>
<body>
    <form id="form1" runat="server">
    <h2>Macoratti .net</h2>
     <hr />
        Carregando uma lista de países a partir de System.Globalization
     <hr />
    <div>
      Relação de países<br />
      <asp:DropDownList ID="ddlPaises" runat="server" Width="225px" Height="16px"> </asp:DropDownList>
    </div>
    </form>
</body>
</html>

 

 

A seguir no arquivo code-behind Default.aspx.cs inclua no evento Load o código abaixo que verifica se é um postback e chama a rotina carregaListaPaises() que iremos definir a seguir:

 

 protected void Page_Load(object sender, EventArgs e)
  {
      if (!IsPostBack)
      {
              ddlPaises.DataSource = carregaListaPaises();
              ddlPaises.DataBind();
      }
 }

 

O método carregaListaPaises() esta definido abaixo e usa as classes do namespace System.Globalization para obter uma relação de países no idioma local:

 

   public static List<string> carregaListaPaises()
   {
            //cria uma lista de paises
            List<string> CulturaLista = new List<string>();
            //Obtem a cultura especifica a partir da classe CultureInfo
            CultureInfo[] getCultureInfo = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
            foreach (CultureInfo getCulture in getCultureInfo)
            {
                //cria um objeto da classe RegionInfo
                RegionInfo GetRegionInfo = new RegionInfo(getCulture.LCID);
                //Incluir cada nome de pais no arraylist
                if (!(CulturaLista.Contains(GetRegionInfo.DisplayName)))
                {
                    CulturaLista.Add(GetRegionInfo.DisplayName);
                }
            }
            //ordena o array usando o método sort para obter os paises em ordem alfabética
            CulturaLista.Sort();
            //retorna a lista de paises
            return CulturaLista;
  }

Abaixo a versão para VB .NET da mesma rotina :

   Public Shared Function carregaListaPaises() As List(Of String)
	'cria uma lista de paises
	Dim CulturaLista As New List(Of String)()
	'Obtem a cultura especifica a partir da classe CultureInfo
	Dim getCultureInfo() As CultureInfo = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
	For Each getCulture As CultureInfo In getCultureInfo
		'cria um objeto da classe RegionInfo
		Dim GetRegionInfo As New RegionInfo(getCulture.LCID)
		'Incluir cada nome de pais no arraylist
		If Not(CulturaLista.Contains(GetRegionInfo.DisplayName)) Then
			CulturaLista.Add(GetRegionInfo.DisplayName)
		End If
	Next getCulture
	'ordena o array usando o método sort para obter os paises em ordem alfabética
	CulturaLista.Sort()
	'retorna a lista de paises
	Return CulturaLista
   End Function

Executando o projeto iremos obter:

Criando o projeto Windows Forms (VB .NET)

Abra o VS Express 2013 for Windows desktop e clique em New Project;

A seguir selecione a linguagem Visual Basic e o template Windows Forms Application;

Informe o nome WF_ListaPaises e clique no botão OK;

A seguir vamos incluir a partir da ToolBox um controle Combobox no formulário form1.vb do projeto atribuindo ao mesmo o nome cboPaises.

O leiaute do formulário é visto a seguir:

No evento Load do formulário form1.vb inclua o código abaixo:

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        cboPaises.DataSource = carregaListaPaises()
    End Sub

Agora para crie o método carregaListaPaises() com o código abaixo:

   Public Shared Function carregaListaPaises() As List(Of String)
        'cria uma lista de paises
        Dim CulturaLista As New List(Of String)()
        'Obtem a cultura especifica a partir da classe CultureInfo
        Dim getCultureInfo() As CultureInfo = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
        For Each getCulture As CultureInfo In getCultureInfo
            'cria um objeto da classe RegionInfo
            Dim GetRegionInfo As New RegionInfo(getCulture.LCID)
            'Incluir cada nome de pais no arraylist
            If Not (CulturaLista.Contains(GetRegionInfo.DisplayName)) Then
                CulturaLista.Add(GetRegionInfo.DisplayName)
            End If
        Next getCulture
        'ordena o array usando o método sort para obter os paises em ordem alfabética
        CulturaLista.Sort()
        'retorna a lista de paises
        Return CulturaLista
    End Function

Executando o projeto teremos o seguinte resultado:

Pegue os projetos aqui:  ASP .NET :   Aspnet_ListaPaises.zip    VB .NET:  WF_ListaPaises.zip

Veja também a vídeo aula para este artigo em : .NET - Carregando uma lista de países usando o namespace System.Globalization

João 4:34 Disse-lhes Jesus: A minha comida é fazer a vontade daquele que me enviou, e completar a sua obra.

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti