sexta-feira, 8 de janeiro de 2010

Recuperar Valor em Célula do GridView no RowUpdating

O exemplo descrito aqui apresenta uma página que contém um GridView contendo sete colunas. Na coluna cinco é apresentado o nome de um arquivo cadastrado e armazenado em uma pasta no diretório raiz da aplicação. No EditItemTemplate da referida coluna eu tenho os controles Label, que apresenta o nome do arquivo atualmente cadastrado, e FileUpload para permitir enviar outro arquivo que substituirá o arquivo atual. Ao substituir o arquivo atual no banco também será necessário apagar o arquivo antigo do disco. O código abaixo demonstra o uso do evento RowUpdating para executar todas as operações necessárias.


// Gravar o arquivo do modo de editar
protected void GridView2_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
// Definir caminho do arquivo
string fileName = "";
string savePath = Server.MapPath("~/uploads/");
// Pegar nome do arquivo antigo
string antigoDocumento = ((Label)((GridView)sender).Rows[e.RowIndex].Cells[5].Controls[1]).Text;
antigoDocumento = string.Concat(savePath, antigoDocumento);
try
{
// Excluir arquivo antigo
if (File.Exists(antigoDocumento))
{
File.Delete(antigoDocumento);
}
// Verificar se existe arquivo no controle FileUpload e gravar em disco
if (((FileUpload)((GridView)sender).Rows[e.RowIndex].Cells[colunaArquivo].FindControl("FileUpload2")).HasFile)
{
fileName = ((FileUpload)((GridView)sender).Rows[e.RowIndex].Cells[colunaArquivo].FindControl("FileUpload2")).FileName;
savePath += fileName;
((FileUpload)((GridView)sender).Rows[e.RowIndex].Cells[colunaArquivo].FindControl("FileUpload2")).SaveAs(savePath);
//FileUpload1.SaveAs(savePath);
}
// Atribuir o nome do arquivo a coleção e.NewValues para a atualização do registro no DataTable
e.NewValues["DOCTO"] = ((FileUpload)((GridView)sender).Rows[e.RowIndex].Cells[colunaArquivo].FindControl("FileUpload2")).FileName;
}
catch (Exception ex)
{
lblErro3.Text = "Ocorreu um erro: " + ex.ToString();
}

}

Um comentário: