none
datagridview RRS feed

  • 问题

  • 怎么才能把数据库中的图片url绑定到这个类型为ataGridViewImageColumn的列上呢? 我用是winform,我把datagridview第二列设为DataGridViewImageColumn,数据库存放的是这个图片的url
    2009年11月10日 14:05

答案

  • private void Form2_Load(object sender, EventArgs e)
    {
        // 01 如果存到数据库中,用下面的方式直接绑定不需要转换
        // 以 Northwind 的 Employees 表为例
        //using (SqlDataAdapter da = new SqlDataAdapter(
        //    "SELECT EmployeeID,LastName,FirstName,BirthDate,Photo FROM Employees",
        //    "server=XXY;database=Northwind;Integrated Security=SSPI"))
        //{
        //    DataSet ds = new DataSet();
        //    da.Fill(ds);
        //    BindingSource bs = new BindingSource(ds.Tables[0], null);
        //    this.dataGridView1.DataSource = bs;
        //}
    
        // 02 在 Table 中动态添加 Image 类型字段,通过 Url 将图片下载下来,并保存到 Table 中
        DataTable dt = new DataTable();
        dt.Columns.Add("Col1", typeof(Int32));
        dt.Columns.Add("Col2", typeof(String));
    
        dt.Rows.Add(new object[] { 1, "http://i4.social.microsoft.com/Image.avatr?size=ExtraLarge&user=X.X.Y&id=5b725d25-3d39-4379-9c1f-9c97efb4d4b0" });
        dt.Rows.Add(new object[] { 2, "http://i4.social.microsoft.com/Image.avatr?size=ExtraLarge&user=X.X.Y&id=5b725d25-3d39-4379-9c1f-9c97efb4d4b0" });
    
        // 增加一个字段将 url 转换为 image
        dt.Columns.Add("Col3", typeof(Image));
    
        WebClient webClient = new WebClient();
    
        foreach (DataRow row in dt.Rows)
        {
            // 如果图片在本地,可不用下载直接使用 Image.FromFile
            string fileName = Path.Combine(@"C:\", Guid.NewGuid().ToString() + ".jpg");
            webClient.DownloadFile(row["Col2"].ToString(), fileName);
            row["Col3"] = Image.FromFile(fileName);
        }
    
        BindingSource bs = new BindingSource(dt, null);
        this.dataGridView1.DataSource = bs;
    }

    知识改变命运,奋斗成就人生!
    • 已标记为答案 YiChun Chen 2009年11月11日 10:32
    2009年11月11日 3:48
    版主