sexta-feira, 26 de junho de 2009

ASP.Net com C# - Inserindo tabela em uma DIV dinâmicamente, utilizando banco de dados

Neste exemplo mostrarei como criar dinâmicamente uma tela dentro de uma DIV expecífica em sua página *.aspx utilisando C#.

Para a execução deste exemplo precisará ter um banco de dados qualquer em SQL e uma div qualquer em sua página com as propriedades runat="server" e id="Sua_Div".

OBS.: (caso seu banco de dados seja em access mude a string de coneção)

Código:

//Cria variavel global para a recepção dos dados
//Neste exemplo usaremos um dado apenas
//Para mais dados crie variáveis com os nomes
//expecificos para facilitar identificação


public string recebe = "";

protected void Button1_Click(object sender, EventArgs e)
{
//String de conexão ao banco de dados
string ConnStr = @"Data Source=Seu_Servidor_Dados;";
ConnStr += "Initial Catalog=Seu_BD;";
ConnStr += "Persist Security Info=True;User ID=Se_Tiver;";
ConnStr += "Password=Se_Tiver;Connection Timeout=0";

//String de seleção no banco
string query = "SELECT top 10 * FROM Sua_Tabela";

//Conexão com o banco
SqlConnection conexao = new SqlConnection(ConnStr);
SqlCommand comando = new SqlCommand(query, conexao);

//Cria Datareader e recebe comando
SqlDataReader dr = null;
conexao.Open();
dr = comando.ExecuteReader();

//Lembrando que a div a ser utilisada deverá estar como
//runat="server" e id="Sua_Div"

Sua_Div.InnerHtml += "<"+"table border='1'"+">";
Sua_Div.InnerHtml += "<"+"tr"+">";

//Enquanto data reader for read()(contiver dados) executa
while (dr.Read())
{
//DataReader recebe campo que pode ser por index[0,1,2...]
//ou string do nome do campo ex:["ID"]
recebe = dr[0].ToString();

Sua_Div.InnerHtml += "<"+"td"+">"+recebe.ToString()+"<"+"/td"+">";
}
Sua_Div.InnerHtml += "<"+"/tr"+">";
Sua_Div.InnerHtml += "<"+"/table"+">";
}


Devido o blog estar reconhecendo as tags de html do código acima tive que concatenar algumas tag's usando +"<"+ que poderão ser removidas ou não.

Até mais.

quinta-feira, 25 de junho de 2009

Adicionando uma DIV dinamicamente em Asp.Net com C#

O código abaixo adiciona uma tag DIV a sua pagina *.aspx utilizando C#.


protected void Button1_Click(object sender, EventArgs e)
{
//Criando controle html genérico
HtmlGenericControl novo = new HtmlGenericControl("DIV");

//Adicionando propriedades
novo.ID = "Nova_Div";

novo.InnerHtml = "Nova_Div";

//Adicionando o controle a página
Controls.Add(novo);

}

//Caso queira inserir em local expecífico(dentro de outro controle) utilise

MinhaDIV.Controls.Add(novo);

Lembrando que neste caso para funcionar a tag MinhaDIV deverá conter a propriedade runat="server".

Até a próxima.


Criando uma tabela dinamicamente com ASP.Net e C#

O código abaixo mostra como criar dinamicamente uma tabela em Asp.Net utilizando C#.

protected void Button1_Click(object sender, EventArgs e)
{
// Cria um novo objeto HtmlTable.
HtmlTable table1 = new HtmlTable();

// Propriedades de formatação.
table1.Border = 1;
table1.CellPadding = 3;
table1.CellPadding = 3;
table1.BorderColor = "red";

//inicio conteúdo da tabela

HtmlTableRow row;
HtmlTableCell cel;
for (int i = 1; i <= 6; i++)
{
row = new HtmlTableRow();
row.BgColor = (i % 2 == 0 ? "blue" : "yellow");
for (int j = 1; j <= 4; j++)
{

//Cria uma celula e adiciona texto

cel = new HtmlTableCell();
cel.InnerHtml = "Linha: " + i + "Celula: " + j;

//Adiciona a celula na tabela

row.Cells.Add(cel);
}

//Adiciona a lina na tabela

table1.Rows.Add(row);
}
Controls.Add(table1);
}

Até a próxima.

segunda-feira, 22 de junho de 2009

Converter de C# para VB.Net

O site abaixo oferece de forma gratuita a conversão de código escrito em C# para VB.Net ou de VB.Net para C#.

http://www.developerfusion.com/tools/convert/csharp-to-vb/

Até a proxima.

Verificar se um número é par ou impar em VB.Net

'Este trecho de código mostra como verificar
'se um número é par ou ímpar

Module Module1
Sub Main()
Dim valor As Integer

Console.Write("Informe um número inteiro: ")
valor = Val(Console.ReadLine())

If valor Mod 2 = 0 Then
Console.WriteLine("O número é par")
Else
Console.WriteLine("O número é ímpar")
End If

Console.ReadKey()
End Sub
End Module

Calcular a àrea de um circulo usando VB.Net

'Este programa mostra como calcular a área
'de um círculo mediante a informação do raio.

Module Module1
Sub Main()
Dim area, raio As Double
Console.Write("Informe o raio do círculo: ")
raio = CDbl(Console.ReadLine())
area = Math.PI * Math.Pow(raio, 2)
Console.WriteLine("A area do círculo de raio " & _
raio & " é igual a " & area)

Console.WriteLine()
Console.WriteLine("Pressione uma tecla para sair...")
Console.ReadKey()
End Sub
End Module

terça-feira, 16 de junho de 2009

Contador de acessos gratuito

O contador que utilizo neste blog é gratuíto e disponibilisa uma série de templates, de recursos e relatórios referentes as estatisticas de acesso ao seu site. Mostra também a quantidade de usuários on line, com um script bem simples que pode ser inserido no fonte de seu site ou blog.
É uma excelente alternativa para quem não quer desenvolver um rsrsr...

Para acessar e se cadastrar: http://www.histats.com


Até a próxima.

Crie um Domínio grátis

O Co.cc é um site que permite que os usuários criem redirecionamentos grátis por um ano com a terminação co.cc (eu sei, o nome é meio estranho, é difícil dizer cêópontocêcê). Com o redirecionamento você poderia criar um endereço personalizado como seunome.co.cc

O grande diferencial do Co.cc é que você tem controle total sobre o DNS, Cname ou redirecionamento do domínio. Isso permite que ele seja utilizado em qualquer servidor ou página da intenet, inclusive no Blogger.

Acesse: http://www.co.cc

Até a próxima.

segunda-feira, 15 de junho de 2009

Componente Timer em ASP.Net com Ajax e C#

Em sua aplicação web insira um componente que está na aba do AJAX na Toolbox de nome Scriptmanager, logo abaixo insira um componente que também está na aba do AJAX na Toolbox de nome Updatepanel dentro deste Updatepanel insira um label que está na Toolbox em Standard e um componente Timer que está na aba do AJAX na Toolbox. Abaixo o código:


Na propriedade interval do Timer altere para 1000.
No evento Tick do componente Timer insira o código abaixo:

//Inserindo a hora atual na propriedade text do label
protected void Timer1_Tick(object sender, EventArgs e)
{
Label1.Text = DateTime.Now.ToLocalTime().ToString();
}

Este é somente um exemplo de utilização, porém há outras formas de fazer para não sobrecarregar o sistema com envios de págianas a cada segundo, mesmo que com a utilização do updatepanel atualise de forma assíncrona somente uma parte da pagina, adapte as suas necessidades.

Execute o projeto e veja o resultado.

Executando um executavel com parâmetros, de nossa aplicação - C#

Suponhamos que queremos adicionar uma Label com o endereço de nosso site para ser chamada quando clicado, basta fazer como o exemplo abaixo.


public void ChamaLink()
{
string app = @"C:\Program Files\Internet Explorer\iexplore.exe";
string param = "http://www.iachou.com.br";
System.Diagnostics.Process process = System.Diagnostics.Process.Start(app, param);
}

sábado, 13 de junho de 2009

Utilizando JavaScript nos WebControls C# e VB.NET

Para utilizar JavaScript em algum WebControl é bem simples. Utilize o método Add da coleção de Atributos para adicionar um script à um determinado contole.

No evento click de um botão em C#:

this.btnJS.Attributes.Add("onClick", "javascript:alert('Botão Pressionado');");


No evento click de um botão em
VB.NET:

Me.btnJS.Attributes.Add("onClick", "javascript:alert('Botão Pressionado');")

Limpando todos os valores dos TextBox do WebForm em C# e VB.NET

Para que seja possível limpar todos os valores dos controles do tipo TextBox do WebForm, é necessário a construção de uma função Recursiva, pois temos que levar em consideração que há controles que também podem ter mais controles dentro. Veja Abaixo:

Em C#:

public void Limpar(Control controlP)
{
Control ctl = default(Control);
foreach (var ctl in controlP.Controls)
{
if (ctl is TextBox)
{
((TextBox)ctl).Text = string.Empty;
}
else if (ctl.Controls.Count > 0)
{
Limpar(ctl);
}
}
}

//Para chamar a função
Limpar(this);


Em VB.NET:

Public Sub Limpar(ByVal controlP As Control)
Dim ctl As Control
For Each ctl In controlP.Controls
If TypeOf ctl Is TextBox Then
DirectCast(ctl, TextBox).Text = String.Empty
ElseIf ctl.Controls.Count > 0 Then
Limpar(ctl)
End If
Next
End Sub

'Para chamar a função:
Call Me.Limpar(Me)



sexta-feira, 12 de junho de 2009

Comando do DOS em c#

Para executar um comando do DOS em C# ou VB utilise as linhas abaixo.

Adicione o namespace:

Em C#:
using System.Diagnostics;

Em VB:
Imports System.Diagnostics

Códiogo para executar os comandos do DOS (Para VB.NET basta tirar o ponto e virgula(;) do final da linha de código.):

Ex1 Copiandoi um arquivo:
Process.Start("cmd.exe", @"/c copy \\10.130.0.190\Compartilhada\Wallpaper\Alegria.bmp C:\Windows\Web\Wallpaper\");

Ex2 Editando o registro:
Process.Start("cmd.exe", @"/c REG ADD hkey_current_user\software\microsoft\windows\currentversion\Themes\LastTheme\ /v Wallpaper /t REG_EXPAND_SZ /d %SystemRoot%\web\wallpaper\Alegria.bmp /f");

Ex3 Editando o registro:
Process.Start("cmd.exe", @"/c REG ADD hkey_current_user\software\microsoft\windows\currentversion\run\ /v SetHour /t Reg_sz /d C:\SetHour\SetHour.exe /f");

Ex4 Alterando a hora do computador buscando de um IP expecifico:
Process.Start("cmd.exe", @"/c net time \\10.130.0.190 /set /yes");

quarta-feira, 10 de junho de 2009

Convertendo String para Float em C#

/*
Este exemplo mostra como converter uma string em
um valor do tipo float.
*/

static void Main(string[] args)
{
string valor_string = "56,30";

// experimente com os valores "23.5", "arquivo" e
// "65,403299"

// tenta efetuar a conversão de string para float
// vou utilizar o tratamento de erros para identificar as
Exceptions
try
{
float valor_float = float.Parse(valor_string);
// exibe o resultado
Console.WriteLine(valor_float);
}
catch(FormatException e)
{
// exibe a informações sobre a exceção
// Input string was not in a correct format.
Console.WriteLine(e.Message);
}

Console.WriteLine("Pressione uma tecla para sair...");
Console.ReadKey();
}

terça-feira, 9 de junho de 2009

Visual Studio 2010 and .NET Framework 4 Beta 1

Microsoft lança visual Studio 2010 e .NET Framework 4 Beta 1.
Links para download:
Visual Studio 2010 Professional Beta 1 – Web Installer
.NET Framework 4 Beta 1

Adicinando meses a data atual em VB

'Este exemplo mostra como adicionar meses à
'data atual

Module Module1
Sub Main()
Dim agora As DateTime = DateTime.Now
Dim meses As Integer = 2 'vamos adicionar 2 meses

'exibe a data atual
Console.WriteLine("Hoje é: " & agora.ToString("dd/MM/yyyy"))

'adiciona os meses
agora = agora.AddMonths(meses)

'exibe a nova data e hora
Console.WriteLine("Daqui " & meses & " meses será: " _
& agora.ToString("dd/MM/yyyy"))

Console.WriteLine()
Console.WriteLine("Pressione uma tecla para sair...")
Console.ReadKey()
End Sub
End Module

Percorrendo as linhas e colunas de um DataGridView e exibindo os valores das células

Este trecho de código mostra como usar dois laços for para percorrer as linhas e colunas de um DataGridView e exibir os valores das células.
Note que o retorno do método DataGridView.Item() é um objeto da classe DataGridViewCell, que representa a célula sendo acessada em um determinado momento. Veja:

private void button3_Click(object sender, EventArgs e){
string res = "Valores das linhas e colunas:\n\n";
DataGridViewCell celula = null;

// vamos percorrer as linhas
for(int i = 0; i <>
// vamos percorrer as colunas de cada linha
for(int x = 0; x <>
// obtém a célula na coluna x e linha i
celula = dataGridView1[x, i];

if(celula.Value != null)
res += celula.Value.ToString() + "\t";
else
res += "-\t";
}

res += "\n";
}

// exibe o resultado
MessageBox.Show(res);
}

Ordenar itens de um Combobox c#

private void button1_Click(object sender, EventArgs e){
// vamos ordenar os elementos do ComboBox em tempo
// de execução
nomes.Sorted = true;
}

segunda-feira, 8 de junho de 2009

Aplicação Ping usando C#

static void Main(string[] args)
{
// using System.Net.NetworkInformation
// constrói um objeto da classe
Ping ping = new Ping();

// cria um objeto da classe PingReply e atribui a ela
// o resultado de uma chamada ao método Send da classe
// Ping. Veja que o timeout da operação é de 10 segundos
PingReply resp = ping.Send("www.iachou.com.br", 10000);
Console.WriteLine("Enviando um ping para: " + resp.Address);
Console.WriteLine("Tempo de resposta: " + resp.RoundtripTime + "ms");
Console.ReadKey();
}

sexta-feira, 5 de junho de 2009

Vantagens do ASP.Net 3.5

  1. Gerenciamento de Styles Sheets CSS e HTML Designer – a criação de arquivos de estilos e as configurações dos elementos ficaram muito mais simples e fácil de entender. Já a aplicação de estilos nos controles nunca foi tão fácil, basta abrir a janela de aplicar estilos, selecionar o controle e o estilo a ser aplicado e pronto, com apenas um clique você aplica. Vale dizer que um formulário pode ter vários arquivos de estilos e a aplicação de diferentes estilos nos controles segue o mesmo esquema. Como a janela de aplicar estilo é uma janela como a Solution Explorer ou Propriedades, o desenvolvedor consegue visualmente ver todos os formatos do respectivo elemento antes de aplicar ao controle. Com isto, a produtividade tornou-se um fator chave neste ponto. Caso queira fazer download de templates de CSS disponíveis na internet, acesse www.openwebdesign.org, escolha o template a use na sua aplicação.
  2. Controle ListView e Data Pager – o controle GridView do ASP.NET 2.0 é sem dúvida um dos mais utilizados em todas as aplicações, e agora com o novo controle ListView, com certeza serão os dois mais abordados. O controle ListView permite vincular uma fonte de dados de qualquer tipo (XML, banco de dados, LINQ), contém diversos tipos de formatações prontas, modelos de exibição de dados, diversos tipos de eventos, e o melhor de tudo é que pode-se aplicar paginação. E por falar em paginação, o novo controle Data Pager pode ser entendido como um container de dados o qual ele é o responsável pela paginação. Isto significa dizer que toda a parte de ligação com a fonte de dados e o controle a serem exibidos estes dados, cabe ao Data Pager controlar. Para um melhor entendimento, imagine que o seu banco de dados ou o objeto de acesso a dados retorna uma quantidade de linhas e você gostaria de exibir estes dados em controles do tipo ListView, GridView, FormView, Datalist, etc, então basta vincular o Data Pager ao respectivo controle. Este recurso isola totalmente os controles de ter que ficar controlando a paginação, deixando a responsabilidade apenas para um único controle.
  3. Objeto LINQ – você já deve ter lido muitos artigos sobre o Language Integrated Query (LINQ) que é um modelo de coleções de entidades fortemente tipada. Isto quer dizer que você poderá ter um modelo de dados independente da fonte de dados de forma objeto-relacional. O LINQ pode usar como fonte de dados um banco de dados SQL Server (objeto LinqDataSource), criar classes (Linq to SQL Classes *.dbml), Datasets, arquivos XML (Linq to XML) e na versão final do VS.NET 2008, teremos o Linq to Entity, que permitirá criar um modelo de objetos com qualquer fonte de dados, por exemplo, Oracle. Na prática, o Linq significa que a maneira de você manipular qualquer conjunto de dados mudou radicalmente, nada de ficar usando o famoso SQL Statement (Select, Insert, Delete e Update). Com isto, os desenvolvedores terão que aprender uma nova maneira de lidar com objetos e coleções de dados, mas garanto que será um caminho sem volta, pois quem testou não quer mais saber de strings SQL. Além de tudo, lidar com objetos fortemente tipados e relacionais tratando-os como coleções é tudo o que o desenvolvedor precisa para programar com produtividade.
  4. Master-page aninhadas – este é um conceito fantástico que surgiu no ASP.NET 2.0 e sem nenhuma dúvida é um dos melhores recursos inventados até hoje no desenvolvimento WEB. No entanto, visualmente não era possível herdar uma Master-page de uma Master, apenas consumir a Master em páginas de formulários. Eu cheguei a usar Master encadeadas via programação, mas rezava para não ter que dar manutenção, pois não havia nenhum recurso visual. Agora na versão 3.5 do ASP.NET, temos o recurso visual de herança de Master dentro de outra Master. Isto significa dizer que você conseguirá usar Master-page encadeadas com todos os recursos visuais existentes. Em linhas gerais, na Master principal você define o ContentPlaceHolder que irá expor na Master filha, o qual deverá conter outros ContentPlaceHolder com layouts diferentes que serão expostos para os formulários consumirem. Com isto você poderá ter no projeto uma Master principal e diversas Master filhas herdando da principal, e, cabe aos formulários herdar tanto a Master principal quanto as filhas. Quero dizer que um formulário poderá herdar direto da Master principal, se for preciso.
  5. Split de tela – pense quantas vezes você alternou entre o código HTML e o Design (usando ou não o SHIFT + F7) numa aplicação? Com certeza foram infinitas vezes, principalmente porque o código HTML inserido na página expressa 100% o design criado ou vice-versa. Agora no ASP.NET 3.5 você tem o recurso de split de tela, ou seja, você consegue dividir a tela de forma a exibir o código HTML e o design na mesma tela. O melhor de tudo é que existe um sincronismo entre os mesmos, refletindo qualquer alteração feita. Para os desenvolvedores isto é um dos melhores recursos implementados nesta versão.
  6. Ajax embutido (extenders) – se você ainda não implementou Ajax no seu projeto ASP.NET então não perca tempo, pois nunca foi tão fácil como no ASP.NET 3.5. Nativamente o VS.NET 2008 não vem com os controles do Ajax, somente com os objetos do Ajax Extensions. O que você precisa fazer é instalar o Ajax Control Toolkit que é uma DLL do Ajax para esta versão, o qual você consegue gratuitamente no www.asp.net/ajax. Uma vez instalada a DLL com os controles os mesmos estarão disponíveis na Toolbox e, então é só aplicar no controles do ASP.NET. Para isto, selecione um controle no formulário e você verá uma seta para direita no canto superior direito (chama-se Smart tag). Clique na seta e será aberta uma janela com todos os controles de extenders do Ajax. Basta, adicionar o respectivo extender conforme a necessidade e configurá-lo.
  7. Java Script Intellisense e Debug – usar o Intellisense não é nenhuma novidade para os desenvolvedores, exceto no Java Script. Agora no ASP.NET 3.5 temos o recurso do Intellisense em qualquer parte do código Java Script e além disso, outro recurso implementado é o debug direto no Java Script, permitindo checar e controlar o fluxo do programa em tempo de debug. Para isto, não se esqueça de ativar a opção de debug no Java Script no IE. Estes recursos relativos ao Java Script eram solicitações da comunidade mundial e o time de ASP.NET nos atendeu nesta versão, afinal, com tantos recursos e códigos existentes, nada como o Intellisense.
  8. Novo IIS versão 7 – o IIS7 tem diversos novos recursos, nova Interface em WinForms .NET, plataforma unificada de administração da aplicação Web, delegação de atividades administrativas dos sites para aplicações, é altamente extensível, mecanismo integrado de diagnóstico e solução de problemas, suporte a implantação em WebFarms, suporte a geração de SSL para testes e roda as aplicações ASP.NET em processos isolados e diferentes de outras versões do IIS. Você pode via código gerenciado controlar o IIS através da sua aplicação.
  9. Recursos das linguagens C# 3.0 e VB.NET 9 – o ASP.NET 3.5 dispõe automaticamente dos novos recursos das linguagens C# 3 e VB.NET 9, permitindo criar códigos mais inteligentes e encapsular muita coisa. Os recursos novos que se destacam são inferência de variáveis, propriedades automáticas, inicialização de coleções, tipos anônimos, métodos de extensão, expressões lambda, métodos parciais, etc.
  10. Projetos de testes no VS.NET 2008 – como toda aplicação requer testes de usabilidade, performance, stress, acesso a banco de dados, etc, o VS.NET 2008 e o ASP.NET 3.5 permitem realizar diversos tipos de testes integrados à ferramenta. Com isto, você poderá simular diversos cenários onde a aplicação irá rodar.

terça-feira, 2 de junho de 2009

Entendendo e escrevendo seu primeiro método em C#

À medida que estamos desenvolvendo nossos códigos, percebemos que estes podem ser divididos de acordo com suas funcionalidades. Ao efetuar esta divisão, estamos na verdade criando blocos de códigos que executam uma determinada tarefa. E, descobrimos que tais blocos de códigos podem ser reaproveitados com frequencia em um mesmo programa. Assim, ao mecanismo usado para disparar a execução destes blocos de códigos é dado o nome de método (ou função em linguagens tais como C e C++).

Um método, em sua forma mais simples, é apenas um conjunto de instruções que podem ser chamadas a partir de locais estratégicos de um programa. Veja um exemplo:

// um método que não recebe nenhum argumento
// e não retorna nenhum valor
static void metodo()
{
Console.WriteLine("Sou um método");
}

Este método apenas exibe o texto "Sou um método". Veja o uso das chaves { e } para delimitar a área de atuação do método (o corpo do método). A palavra-chave void indica que este método não retorna nenhum valor ao finalizar sua execução enquanto a palavra-chave static é melhor explicada na nossa seção sobre modificadores em C#. Todos os métodos em C# possuem parênteses, os quais servem como marcadores para a lista de parâmetros do método. Parênteses vazios indicam que o método não possui parâmetros.

Veja agora um trecho de código completo exemplificando a chamada ao método recém-criado:

// um método que não recebe nenhum argumento
// e não retorna nenhum valor
static void metodo()
{
Console.WriteLine("Sou um método");
}

static void Main(string[] args)
{
// efetua uma chamada ao método
metodo();

Console.WriteLine("\n\nPressione uma tecla para sair...");
Console.ReadKey();
}

Como inserir comentários em seus códigos C#

Comentários são uma ferramenta de muita utilidade quando estamos desenvolvendo um aplicativo ou até mesmo um algoritmo. Ao usar comentários, nós estamos deixando pistas do propósito de um determinado trecho do código do programa. Dias, semanas ou meses depois, o código não estará tão claro em nossa mente. Os comentários deixados com certeza nos ajudarão a lembrar dos detalhes mais facilmente.

Podemos usar comentários em C# de duas formas: o comentário de linha única e o comentário de múltiplas linhas. Veja como usar o comentário de linha única:

// Declara a variável que guarda o nome do cliente
string nome;

Comentários de linha única podem também ser inseridos após o código C#. Veja:

Console.WriteLine(nome); // Exibe o resultado

Comentários de múltiplas linhas geralmente são usados para informar o propósito de um programa, classes, métodos, etc. Veja:

/*
O trecho de código abaixo cria uma variável
para armazenar o nome do cliente. Logo abaixo
o valor desta variável é exibido.
*/

string nome = "Osmar";
Console.WriteLine(nome); // Exibe o resultado
Console.ReadKey();

segunda-feira, 1 de junho de 2009

Como obter a célula atual em um DataGridView

A célula atual de um DataGridView pode ser obtida por meio da propriedade CurrentCell. Esta propriedade retorna um objeto da classe DataGridViewCell. Por meio de propriedades e métodos desta classe podemos obter os índices da coluna e da linha às quais a célula pertence, seu valor, estilo, etc.
Veja um trecho de código no qual obtemos o valor da célula atual de um

DataGridView:

private void button3_Click(object sender, EventArgs e)
{
// vamos obter a célula atual (que possui o foco)
DataGridViewCell celulaAtual = dataGridView1.CurrentCell;

// vamos exibir o valor da célula atual
string valor = celulaAtual.Value.ToString();
MessageBox.Show("O valor da célula atual é: "+ valor);
}

Se não houver célula atual no DataGridView, o retorno da propriedade CurrentCell será null.