C#:关闭app后列出图像重置

时间:2015-08-26 02:11:03

标签: c# sql gridview imagelist startup-folder

我正在使用VS2013开发一个带有SQL Server数据库的Windows窗体应用程序 我在数据库表中有一列用于存储图像名称:
enter image description here

在我的应用程序中,我创建了一个按钮,用于从我的计算机中选择图像并将该图像保存到应用程序启动路径:

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); }
    }  

该代码将从计算机加载图像,保存到文件夹"图像"在启动路径中,也将图像添加到imagelist1 之后,我有一个按钮将imagename插入" Images"列(在SQL Server数据库中)。 我有这个代码使用imagelist为我的网格:

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中)然后重新打开(或再次调试)。网格不会显示我的图像
  enter image description here

即使图像仍在文件夹中:
enter image description here
图像列表中没有图像:
enter image description here

我不知道我的问题是什么。你能支持我如何:
1 /使用C#将图像从PC添加到启动路径的文件夹,并将图像名称保存到SQL服务器(将图像绑定到网格)。
2 /将启动路径文件夹中的图像绑定到图像列表并使用它 感谢您的支持。

1 个答案:

答案 0 :(得分:0)

我感觉代码中存在两个问题,可能其中一些会导致您的问题。

首先,如果您将表加载到DataGridView(或其他内容),并使用新映像更新GridView,但不能手动写回数据库,则修改将不会保存到数据库。

正如你所说,

  

之后,我有一个按钮将imagename插入"图像"列(在SQL Server数据库中)。我有这个代码使用imagelist为我的网格

我想你问题的一个原因可能与此有关。

其次,您使用对话框选择图像并复制到路径" APP \ Images",并将名称存储到数据库。当用户下次运行您的应用程序时,您将如何做?加载表并获取图像名称,并从路径中找到这些图像? 请提供相关代码以解决您的问题。

顺便说一句,如果数据库是本地的离线数据库,并且您也不会存储太多记录,您也可以考虑将图像原始数据存储在数据库中。 (我知道有些人不推荐这种方式,但在我看来,这也是解决问题的一种方法。)