none
DataTableの画像列をImageListに収めたい RRS feed

  • 質問

  • スキルが足らなくて申し訳なく思いつつ、質問します。

    SQL ServerにImage列があり、画像を格納することは、できました。

    けれども、今度は、その画像列の内容をImageListに読み出す方法が

    わかりません。おそらく、ストリーム処理の理屈がきちんとわかっていないがために、

    できないのだと我ながら思っています。どうか、お助けください。

    2006年8月9日 5:56

回答

  • 諸農さま、ありがとうございます! 解決しました。MemoryStreamクラスというのがあるんですね。

    コード載せるのって、こんな載せ方でいいかわかりませんが……

            private void バインディングソースより読み込んでイメージリストにセット()
            {
                画像のBindingSource.MoveFirst();
                for (int i = 0; i < 画像のBindingSource.Count; i++)
                {
                    DataRowView dr=(DataRowView) 画像のBindingSource.Current;
                    int id=(int) dr[0];
                    byte[] bt=(byte[]) dr[画像の列番号];
                    MemoryStream st=new MemoryStream();
                    st.Write(bt, 0, (int) bt.Length);
                    Bitmap bmp = new Bitmap(st);
                    st.Close();
                    セット対象のimageList.Images.Add(bmp);
                    画像のBindingSource.MoveNext();
                }
            }

    データベースからのテーブルが、DataTableにあって、BindingSourceが設定されているとしての場合です。

     

    2006年8月10日 5:31

すべての返信

  • 諸農です。

    イメージリストにどうしたいのかわかりませんが、イメージの取得方法でしたら以下のTipsからサンプルのダウンロードが出来ます。(サンプルはASP.NETでVBコードです)

    http://www.microsoft.com/japan/msdn/asp.net/tips/DataBaseImage2/

     

    2006年8月9日 6:17
  • 諸農様、ありがとうございます。

    データベースの内容を、DataGridViewとかではなくて、「ListViewのアイコンとして表示させたい」のです。ImageListにこだわってはいませんので、別の解決方法でもわかれば、ありがたいです。

    ASP.NETの例ですが、Response.BinaryWriteではASP.NETすぎて、未熟な私にはWindowsFormでの活かし方が導き出せませんでした

    2006年8月9日 23:41
  • 諸農です。

    VS2003時代のサンプル(HowTo)です。参考になると思います。

    http://support.microsoft.com/default.aspx?scid=kb;ja;317701

    どちらにしてもデータベースカラムから取得したバイト配列をストリームにコピーすることになると思います。

     

    2006年8月10日 0:44
  • 諸農さま、ありがとうございます! 解決しました。MemoryStreamクラスというのがあるんですね。

    コード載せるのって、こんな載せ方でいいかわかりませんが……

            private void バインディングソースより読み込んでイメージリストにセット()
            {
                画像のBindingSource.MoveFirst();
                for (int i = 0; i < 画像のBindingSource.Count; i++)
                {
                    DataRowView dr=(DataRowView) 画像のBindingSource.Current;
                    int id=(int) dr[0];
                    byte[] bt=(byte[]) dr[画像の列番号];
                    MemoryStream st=new MemoryStream();
                    st.Write(bt, 0, (int) bt.Length);
                    Bitmap bmp = new Bitmap(st);
                    st.Close();
                    セット対象のimageList.Images.Add(bmp);
                    画像のBindingSource.MoveNext();
                }
            }

    データベースからのテーブルが、DataTableにあって、BindingSourceが設定されているとしての場合です。

     

    2006年8月10日 5:31