Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Eu sei que é possivel só não sei como fazer:
Eu to terminando um projeto que inclui um módulo pra ftp no servidor remoto.
Até ai, eu criei usei um datagrid que é preenchido com os arquivos do servidor, mostrando nome, data, tamanho e atributos do arquivo. O usário pode renomear diretamente no datagrid, excluir e upar arquivos pra duas pastas previamente criadas.
eu queria fazer igual aos programas de ftp que mostram na primeira coluna um ícone conforme o tipo de arquivo. Já criei estes icones (em bmp para excel, md b, pdf, html, jpg, gif, png) e o datagrid já tá populado mas não consigo fazer com que mostre a imagem na primeira coluna.
Meu codigo ta dessa forma:
recebe como parametro o path selecionado e retorna os dados num datareader como se fosse uma consulta a um banco de dados.
>
public List<cFTP> GetFileList(string path)
{
StringBuilder result = new StringBuilder();
FtpWebRequest reqFtp;
try
{
reqFtp = ((FtpWebRequest)FtpWebRequest.Create(new Uri(m_Uri + path)));
reqFtp.UseBinary = true;
reqFtp.Credentials = new NetworkCredential(m_ftpUsuario, m_ftpPassword);
reqFtp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
WebResponse response = reqFtp.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
List<cFTP> results = new List<cFTP>();
string[] temp;
string filename=null;
string line = reader.ReadLine();
int count= -1;;
while(!(line == null))
{
temp = line.Split(' ');
if(line.Substring(0, 1) != "d")
{
count++;
filename=temp[temp.Length - 1].ToString();
string[] ext = filename.Split('.');
results.Add(new cFTP(null));
switch (ext[1])
{
case "html":
results[count]._icone="html.bmp";
break;
case "jpg":
results[count]._icone = "jpg.bmp";
break;
case "gif":
results[count]._icone = "gifpng.bmp";
break;
case "png":
results[count]._icone = "gifpng.bmp";
break;
case "xls":
results[count]._icone = "xls.bmp";
break;
case "mdb":
results[count]._icone = "mdb.bmp";
break;
case "pdf":
results[count]._icone = "pdf.bmp";
break;
default:
results[count]._icone = "outros.bmp";
break;
}
//long size=GetFileSize(path+ filename);
//DateTime data = GetDateTime(path + filename);
results[count]._attrib=line.Substring(0, 10);
results[count]._size = line.Substring(30, 15);
results[count]._date = line.Substring(46, 12);
results[count]._name = line.Substring(59, line.Length-59);
}
line = reader.ReadLine();
}
reader.Close();
response.Close();
return results;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, "FTP error", MessageBoxButtons.OK);
return null;
}
}
no retorno do metodo:
>
private void cmdListFiles2_Click(object sender, EventArgs e)
{
dgRemoteFiles.DataSource=null; // limpa do datagrid
string folder =lstFolders2.SelectedItem.ToString(); // pega o folder selecionado num listbox
List<cFTP> files = cFTP.GetFileList(folder); // monta o datareader com todos os arquivos do folder, descatando o que for pasta
DataSet ds = new DataSet(); // cria o dataset
DataTable dt = new DataTable("Remote"); // cria a tabela. O grid aponta do style pra essa tabela
dt.Columns.Add("icone", typeof(Image)); // define o campo como imagem
dt.Columns.Add("name", typeof(String));
dt.Columns.Add("size", typeof(String));
dt.Columns.Add("date", typeof(String));
dt.Columns.Add("attrib", typeof(String));
ds.Tables.Add(dt);
for (int x=0; x < files.Count; x++)
{
DataRow dr = ds.Tables["Remote"].NewRow();
//dr["icone"]=Image.FromFile(files["icone"].ToString());
dr["icone"] = Image.FromFile(Application.StartupPath + @"\"+ files[0].icone, true); // mapeia o arquivo
dr["name"] = files[0].name;
dr["size"] = files[0].size;
dr["date"] = files[0].date;
dr["attrib"] = files[0].attrib;
ds.Tables["Remote"].Rows.Add(dr); // atribui a linha à tabela no dataset
// lstFiles2.Items.Add(file);
}
dgRemoteFiles.DataSource = ds.Tables["Remote"]; // atribui o dataset ao datagrid.
lblSelectedFolder.Text= lstFolders2.SelectedItem.ToString(); // mostra no label o nome da pasta selecionada
}
No grid aparece em vez da imagem o texto: System.Drawing.Bitmap em vez da imagem.
Carregando comentários...