2

VS2013 を使用して、SQL Server データベースで Windows フォーム アプリケーションを開発しています。
イメージ名を格納するためのデータベース テーブルに列があります。
ここに画像の説明を入力

私のアプリケーションでは、コンピューターから画像を選択し、その画像をアプリケーションの起動パスに保存するボタンを作成します。

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 にも画像を追加します。
その後、イメージ名を「イメージ」列(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# を使用して PC からスタートアップ パスのフォルダーにイメージを追加し、イメージ名を SQL サーバーに保存します (イメージをグリッドにバインドするため)。
2/ 起動パスのフォルダーからイメージをイメージリストにバインドして使用します。
ご支援ありがとうございます。

4

1 に答える 1

0

あなたのコードには 2 つの問題があるように感じます。

まず、テーブルを DataGridView (またはその他のもの) にロードし、新しいイメージで GridView を更新するが、手動でデータベースに書き戻さない場合、変更はデータベースに保存されません。

あなたが言ったように、

その後、イメージ名を「イメージ」列(SQLサーバーデータベース)に挿入するボタンがあります。グリッドにイメージリストを使用するこのコードがあります

あなたの問題の1つの理由は、ここに関連している可能性があると思います。

次に、ダイアログを使用してイメージを選択し、パス "APP\Images" にコピーして、名前をデータベースに保存しました。ユーザーが次にアプリケーションを実行したときにどうしますか? テーブルをロードして画像名を取得し、パスからそれらの画像を見つけますか? 問題を解決するには、相対コードを提供してください。

ところで、データベースがローカルのオフライン DB であり、あまり多くのレコードを保存しない場合は、画像の生データも DB に保存することを検討してください。(この方法を推奨しない人がいることは知っていますが、私の意見では、これも問題を解決する 1 つの方法です。)

于 2015-08-26T02:35:00.800 に答える