C#: список изображений сбрасывается после закрытия приложения

Я использую VS2013 для разработки приложения Windows Form с базой данных SQL Server.
У меня есть столбец в таблице базы данных для хранения имени изображения:
введите описание изображения здесь

В моем приложении я создал кнопку, чтобы выбрать изображение на моем компьютере и сохранить его в пути запуска приложения:

private void buttonX1_Click(object sender, EventArgs e)
    {
        try
        {
        OpenFileDialog dlg = new OpenFileDialog();
        dlg.Filter = "Image only. | *.jpg; *.jpeg; *png; *.gif;";
        dlg.InitialDirectory = @"E:\";
        dlg.Multiselect = false;
        string a = null;
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                string[] tmp = dlg.FileNames;
                foreach (string i in tmp)
                {
                FileInfo fi = new FileInfo(i);
                string[] xxx = i.Split('\\');
                string des = Application.StartupPath + @"\Images\" + xxx[xxx.Length - 1];
                string desfolder = Application.StartupPath + @"\Images\";
                imagename = xxx[xxx.Length - 1].ToString();
                System.IO.Directory.CreateDirectory(desfolder);
                File.Delete(des);
                imageuploaded.Image = Image.FromFile(dlg.FileName);
                //over.
                fi.CopyTo(des);
                imageList1.Images.Add(imagename, Image.FromFile(des));
                //Process.Start("explorer.exe", desfolder);
                }
                MessageBox.Show("Thành công ");
            }
        }
        catch (Exception ex) { MessageBox.Show(ex.Message); }
    }  

Этот код загрузит изображение с компьютера, сохранит его в папку "images" при запуске и добавит изображение в imagelist1.
После этого у меня есть кнопка для вставки imagename в столбец "Изображения" (в базе данных SQL-сервера). У меня есть этот код, чтобы использовать список изображений для моей сетки:

public PrdMan()
    {
        InitializeComponent();
        GridPanel panel = superGridControl1.PrimaryGrid;
        GridColumn column = panel.Columns["image"];
        column.EditorType = typeof(MyGridImageEditControl);
        column.EditorParams = new object[] { imageList1, ImageSizeMode.Zoom };
        //superGridControl1.PrimaryGrid.Columns[8].Visible = false;
        //superGridControl1.PrimaryGrid.Columns[2].CellStyles = "dd/MM/yyyy";
        //styleManager1.ManagerStyle = eStyle.Metro;
        // 
        //this.Location = new Point(0, 0);
        //this.Size = Screen.PrimaryScreen.WorkingArea.Size;
    }  

И код для загрузки сетки:

this.mPhamTableAdapter.Fill(this.beautyMaDataSet.MPham);
            this.superGridControl1.PrimaryGrid.DataSource = this.beautyMaDataSet.MPham;  

Моя проблема: Когда я загружаю изображение и вставляю его в столбцы "Изображения" базы данных: это успешно, и сетка отобразит изображение. Но когда я закрываю приложение (после публикации) или прекращаю отладку (в VS), то снова открываю (или снова отлаживаю). Сетка не будет отображать мое изображение
введите описание изображения здесь

хотя изображение все еще было в папке:
введите описание изображения здесь
И imagelist не имеют изображения в списке:
введите описание изображения здесь

Я не знаю, в чем моя проблема. Можете ли вы поддержать меня, как:
1 / Добавьте изображение с ПК в папку пути запуска, используя C#, и сохраните имя изображения на сервере SQL (для привязки изображения к сетке).
2 / Привязать изображение из папки пути запуска к списку изображений и использовать его.
Спасибо за помощь.

1 ответ

Я чувствую две проблемы в вашем коде, возможно, некоторые из них вызывают вашу проблему.

Во-первых, если вы загружаете таблицу в DataGridView (или что-то еще) и обновляете GridView новым изображением, но не выполняете обратную запись в базу данных вручную, изменение не будет сохранено в базе данных.

Как вы сказали,

После этого у меня есть кнопка для вставки imagename в столбец "Изображения" (в базе данных SQL-сервера). У меня есть этот код, чтобы использовать список изображений для моей сетки

Я думаю, что одна из причин вашей проблемы может быть связана с здесь.

Во-вторых, вы использовали диалоговое окно, чтобы выбрать изображение и скопировать в путь "APP\Images", и сохранить имя в базе данных. Как вы поступите, когда пользователь запустит ваше приложение в следующий раз? Загрузить таблицу и получить имена изображений, и найти эти изображения по пути? Пожалуйста, предоставьте соответствующие коды для решения вашей проблемы.

Кстати, если база данных является локальной, автономной БД, а также вы не будете хранить слишком много записей, вы можете также сохранить исходные данные своего изображения в БД. (Я знаю, что некоторые люди не рекомендуют этот способ, но, на мой взгляд, это тоже один из способов решения вашей проблемы.)

Другие вопросы по тегам