Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lab Design

Imagens no datagrid

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.