2

URL から画像を読み込んで、それを DataGridView のセル (列ヘッダーではなく) に配置するにはどうすればよいですか? 画像を含む行は、Web サービスからの検索に基づいて実行時にビューに追加されます。この特定の目的に対する答えが見つかりません...助けてください!

まずはPictureBoxを使ってみました。イベントが Web サービスから受信されると、結果をループして行を追加します。各行には画像が含まれます。

// Add image
System.Windows.Forms.PictureBox picEventImage = new System.Windows.Forms.PictureBox();
picEventImage.Image = global::MyEventfulQuery.Properties.Resources.defaultImage;
picEventImage.ImageLocation = Event.ImageUrl;
this.dgvEventsView.Controls.Add(picEventImage);
picEventImage.Location = this.dgvEventsView.GetCellDisplayRectangle(1, i, true).Location;

画像は完全にロードされますが、ビューから切り離されているように見えます。つまり、スクロールしても画像が移動せず、新しいデータでビューを更新すると、画像がハングアップします...悪いです。

だから私は他の投稿からのヒントを試しました:

Image image = Image.FromFile(Event.ImageUrl);
DataGridViewImageCell imageCell = new DataGridViewImageCell();
imageCell.Value = image;
this.dgvEventsView[1, i] = imageCell;

しかし、「URI 形式はサポートされていません」というエラーが表示されました。

  • 画像の使い方が間違っていますか?
  • Image の代わりに URL 画像に使用できる別のクラスはありますか?
  • または、カスタム コントロール (PictureBox を含む) を作成して DataGridView セルに追加するしかありませんか?
4

2 に答える 2

3

このSO投稿を ご覧くださいhttps://stackoverflow.com/a/1906625/763026

 foreach (DataRow row in t.Rows)
    {
                    HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(row["uri"].ToString());
                    myRequest.Method = "GET";
                    HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
                    System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(myResponse.GetResponseStream());
                    myResponse.Close();

                    row["Img"] = bmp;
    }
于 2012-05-25T19:51:18.650 に答える
-3

これが私の解決策です。DataGridView から画像を取得して PictureBox にロードするのは正しく機能します。

フォーム イベント:

 Private con As New SqlConnection("YourConnectionString")
    Private com As SqlCommand
Private Sub DGV_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGV.CellClick
        con.Open()
        com = New SqlCommand("SELECT MyPhoto FROM tbGalary WHERE ID=" & DGV.Rows(e.RowIndex).Cells(0).Value, con)
        Dim ms As New MemoryStream(CType(com.ExecuteScalar, Byte()))
        txtPicture.Image = Image.FromStream(ms)
        txtPicture.SizeMode = PictureBoxSizeMode.StretchImage
        com.Dispose()
        con.Close()
End Sub

SQL テーブル:

CREATE TABLE [dbo].[tbGalary](
    [ID] [int] NOT NULL,
    [MyPhoto] [image] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

SQL 挿入イメージ:

INSERT INTO tbGalary VALUES('1','D:\image1.jpg')
INSERT INTO tbGalary VALUES('2','D:\image2.jpg')
INSERT INTO tbGalary VALUES('3','D:\image3.jpg')
INSERT INTO tbGalary VALUES('4','D:\image4.jpg')
INSERT INTO tbGalary VALUES('5','D:\image5.jpg')

結果

ビデオ リンク: DataGridView で画像を取得し、VB.NET の PictureBox に読み込みます

于 2013-11-14T06:23:26.843 に答える