TECHNOLOGIES
FORUMS
JOBS
BOOKS
EVENTS
INTERVIEWS
Live
MORE
LEARN
Training
CAREER
MEMBERS
VIDEOS
NEWS
BLOGS
Sign Up
Login
No unread comment.
View All Comments
No unread message.
View All Messages
No unread notification.
View All Notifications
Answers
Post
An Article
A Blog
A News
A Video
An EBook
An Interview Question
Ask Question
Forums
Monthly Leaders
Forum guidelines
Abdu Abdul
1.3k
409
15.4k
Help out with this code please. Image from datagridview to desktop.
Mar 28 2021 9:51 PM
i am displaying images into datagridview, is working fine without any problem, but when i wan to download a single image it keeps on showing me problems that i have to (Select a single cell from Attachment column). Please the code is detailed. one can try it and help out with a solution. thank you
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
namespace ImageThumbnailDataGridView
{
public partial class FormMain : Form
{
private List<string> files = null;
private int numberPreviewImages = 100;
private int imageSize = 90;
private int currentStartImageIndex = 0;
private int currentEndImageIndex = 0;
//Dictionary will store the attachments
Dictionary<int, byte[]> myAttachments;
public FormMain()
{
InitializeComponent();
}
private void btnLoadImages_Click(object sender, EventArgs e)
{
if (openFileDialog.ShowDialog(this) != DialogResult.OK)
{
return;
}
files = new List<string>();
files.AddRange(openFileDialog.FileNames);
files.Sort();
if (numberPreviewImages == 1)
{
currentStartImageIndex = 0;
currentEndImageIndex = 1;
}
else
{
currentEndImageIndex = currentStartImageIndex + numberPreviewImages - 1;
}
this.LoadImages();
}
private void LoadImages()
{
try
{
if (files == null)
{
return;
}
if (this.WindowState == FormWindowState.Minimized)
{
return;
}
dataViewImages.Rows.Clear();
dataViewImages.Columns.Clear();
int numColumnsForWidth = (dataViewImages.Width - 10) / (imageSize + 20);
int numRows = 0;
int numImagesRequired = 0;
if (currentEndImageIndex > files.Count)
{
// Are we requesting to display more images than we actually have? If so then reduce
if (currentStartImageIndex == 0)
{
numImagesRequired = files.Count;
}
else
{
numImagesRequired = (currentEndImageIndex - currentStartImageIndex) - (currentEndImageIndex - _files.Count);
}
}
else
{
// Calculated the number of rows we will need for normal use
numImagesRequired = currentEndImageIndex - currentStartImageIndex;
}
numRows = numImagesRequired / numColumnsForWidth;
if (numImagesRequired % numColumnsForWidth > 0)
{
numRows += 1;
}
if (numImagesRequired < numColumnsForWidth)
{
numColumnsForWidth = numImagesRequired;
}
int numGeneratedCells = numRows * numColumnsForWidth;
// Dynamically creating the columns
for (int index = 0; index < numColumnsForWidth; index++)
{
DataGridViewImageColumn dataGridViewColumn = new DataGridViewImageColumn();
dataViewImages.Columns.Add(dataGridViewColumn);
dataViewImages.Columns[index].Width = imageSize + 20;
}
// Creating the rows
for (int index = 0; index < numRows; index++)
{
dataViewImages.Rows.Add();
dataViewImages.Rows[index].Height = imageSize + 20;
}
int columnIndex = 0;
int rowIndex = 0;
for (int index = currentStartImageIndex; index < currentStartImageIndex + numImagesRequired; index++)
{
// Load the image from the file and add to the DataGridView
Image image = Helper.ResizeImage(files[index], imageSize, imageSize, false);
dataViewImages.Rows[rowIndex].Cells[columnIndex].Value = image;
dataViewImages.Rows[rowIndex].Cells[columnIndex].ToolTipText = Path.GetFileName(files[index]);
// Have we reached the end column? if so then start on the next row
if (columnIndex == numColumnsForWidth - 1)
{
rowIndex++;
columnIndex = 0;
}
else
{
columnIndex++;
}
}
// Blank the unused cells
if (numGeneratedCells > numImagesRequired)
{
for (int index = 0; index < numGeneratedCells - numImagesRequired; index++)
{
DataGridViewCellStyle dataGridViewCellStyle = new DataGridViewCellStyle();
dataGridViewCellStyle.NullValue = null;
dataGridViewCellStyle.Tag = "BLANK";
dataViewImages.Rows[rowIndex].Cells[columnIndex + index].Style = dataGridViewCellStyle;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void dataViewImages_Resize(object sender, EventArgs e)
{
this.LoadImages();
}
private void FormMain_Load(object sender, EventArgs e)
{
imageSize = 90;
}
private void button1_Click(object sender, EventArgs e)
{
if (dataViewImages.SelectedRows.Count == 1 && dataViewImages.SelectedCells[0].ColumnIndex == 1 && dataViewImages.SelectedCells[0].Value != null)
{
DownloadAttachment(dataViewImages.SelectedCells[0]);
}
else
MessageBox.Show("Select a single cell from Attachment column", "Error uploading file", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
private void DownloadAttachment(DataGridViewCell dgvCell)
{
string fileName = Convert.ToString(dgvCell.Value);
//Return if the cell is empty
if (fileName == string.Empty)
return;
FileInfo fileInfo = new FileInfo(fileName);
string fileExtension = fileInfo.Extension;
byte[] byteData = null;
//show save as dialog
using (SaveFileDialog saveFileDialog1 = new SaveFileDialog())
{
//Set Save dialog properties
saveFileDialog1.Filter = "Files (*" + fileExtension + ")|*" + fileExtension;
saveFileDialog1.Title = "Save File as";
saveFileDialog1.CheckPathExists = true;
saveFileDialog1.FileName = fileName;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
byteData = myAttachments[dgvCell.RowIndex];
File.WriteAllBytes(saveFileDialog1.FileName, byteData);
}
}
}
}
}
Reply
Answers (
1
)
Display same result set as combined for Two different Criteria on Max
Changing value in variable from another called class