kasowanie zdjecia

0

Witam,
dodaję dane do datagridview w ten sposob:

DataGridViewImageColumn imageCol = new DataGridViewImageColumn();
DataGridViewCheckBoxColumn chkv = new DataGridViewCheckBoxColumn();
DataGridViewTextBoxColumn ctx = new DataGridViewTextBoxColumn();
 DataGridViewTextBoxColumn ctx2 = new DataGridViewTextBoxColumn();

if (dataset.Tables[0].Rows.Count > 0)
            {
                dgv.Columns.Add(imageCol);
                dgv.Columns[0].Width = 210;
                dgv.Columns[0].HeaderText = "Foto";
                dgv.Columns.Add(chkv);
                dgv.Columns[1].Width = 50;
                dgv.Columns[1].HeaderText = "Główne";
                dgv.Columns.Add(ctx);
                dgv.Columns[2].Visible = false;
                dgv.Columns.Add(ctx2);
                dgv.Columns[3].Visible = false;
            }

string defpath = Directory.GetCurrentDirectory() + @"\photo\small\";

            for (int x = 0; x < dataset.Tables[0].Rows.Count; x++)
            {
                
                imgadd = new Bitmap(defpath + dataset.Tables[0].Rows[x][0].ToString().Trim());
                int height = imgadd.Size.Height;
                dgv.Rows.Add();
                dgv.Rows[x].Cells[0].Value = imgadd;
                dgv.Rows[x].Cells[1].Value = dataset.Tables[0].Rows[x][1].ToString().Trim();
                dgv.Rows[x].Cells[2].Value = dataset.Tables[0].Rows[x][2].ToString().Trim();
                dgv.Rows[x].Cells[3].Value = dataset.Tables[0].Rows[x][3].ToString().Trim();
                dgv.Rows[x].Height = height + 5;

            }

I teraz zaczyna się problem.
Zaznaczam którekolwiek zdjęcie i w ten sposób uruchamiam opcję kasowania pliku.
Ale niestety, nie mogę go usunąć, ponieważ dostaję komunikat, że plik jest używany przez inny proces. Domyśalm się, że chodzi o proces "imgadd", który to wczytuje zdjęcie. Ale jak go w takim razie usunąć ? imgadd.dispose() skasuje ostatnio wczytany plik, ale jak usunąć całą resztę wczytanych plików?

0

imgadd to nie jest proces, tylko Twoja zmienna. :|

Proces to Twój program, mówiąc w dużym uproszczeniu. Otwierasz sobie plik ze zdjęciem i trzymasz go otwartego, dlatego nie możesz go usunąć. Zwalniaj każdy plik po jego wczytaniu, to nie będziesz miał tego problemu.

0

Tylko jak go zwolnic?
Kiedy robie imgadd.dispose() wtedy w dgv nic sie nie wyswietla.

1

Kiedy robie imgadd.dispose() wtedy w dgv nic sie nie wyswietla.

Logiczne, bo już go nie ma ;)

Skąd podejrzenie że chodzi o imgadd? Wydaje mi się że bitmapy nie blokują plików na dysku... ie masz na pewno żadnego streama albo czegoś podobnego używającego tego pliku?

0

Nie, nic innego nie używa tego pliku.
Jest on jedynie ładowany do grida.

0

Ok
problem rozwiązałem.
Wykorzystałem pomysł Ginak'a, który miał podobny problem do mojego :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1