绑定后将图片添加到复选框列表

时间:2017-02-10 13:48:33

标签: c# html asp.net checkbox

有没有办法通过datasource / databind填充复选框列表然后实际添加图像到每个复选框?我知道如何分开做两件事,但似乎无法弄清楚如何让它们一起工作。

基本上我会有一个学生的复选框列表供教师选择,我被要求在每个复选框旁边放一张每个学生的照片。

我目前获取图片的方式是我有一个webform,它在网址中插入一个ID然后从数据库中抓取blob然后将二进制文件转换为缩略图,然后在本地保存然后重定向到它。然后,当我想在不同的webform上获取图像时,我只需要使用Response.Redirect("imgs.aspx?ID=[Student Id]")并将它放入学生的小图像中,有没有办法修改复选框列表以便我可以调用imgs webform并在其复选框旁边显示学生的图像?

imgs.aspx背后的代码:

 protected void Page_Load(object sender, EventArgs e)
    {
        var stuId = Request.QueryString["ID"];

        if (stuId.Length <= 0)
        {
            stuId = "100097645"; // If no ID number sent, display default 'image not available' thumbnail.
        }
        var con = new SqlConnection
        {
            ConnectionString =
                removed for security reasons
        };
        con.Open();
        var sqlCommand = new SqlCommand("Select BINARY_OBJECT FROM BLOBS WHERE OWNER_REF=" + stuId, con);
        var reader = sqlCommand.ExecuteReader(CommandBehavior.CloseConnection);
        reader.Read();

        var byteArray = (byte[])reader["BINARY_OBJECT"];
        var mstream = new System.IO.MemoryStream(byteArray, 0, byteArray.Length);
        var dbImage = System.Drawing.Image.FromStream(new System.IO.MemoryStream(byteArray));
        var thumbnailImage = dbImage.GetThumbnailImage(100, 100, null, new IntPtr());
        thumbnailImage.Save(mstream, dbImage.RawFormat);
        var thumbnailByteArray = new byte[mstream.Length];
        mstream.Position = 0;
        mstream.Read(thumbnailByteArray, 0, Convert.ToInt32(mstream.Length));
        Response.Clear();
        Response.BinaryWrite(thumbnailByteArray);
    }
到目前为止,

代码显示图像:

    private void StudentSelected()
{
    string query = "Select distinct (Convert(varchar, PERSON_CODE) + '|' + FORENAME + ' ' + SURNAME) as StudentName, (Convert(varchar, PERSON_CODE) + '|' +  FORENAME + '|' + SURNAME) as StudentValue From people where (FORENAME = '" + stuforename + "') and (SURNAME = '" + stusurname + "') and (Convert(varchar,PERSON_CODE) = '" + stuid + "')";
                StudentCheckBoxData.Merge(GetData(query));
                cbSelection.DataSource = StudentCheckBoxData;
                cbSelection.DataTextField = "StudentName";
                cbSelection.DataValueField = "StudentValue";
                cbSelection.DataBind();

            try
            {
                foreach (ListItem checkBox in cbSelection.Items)
                {
                    checkBox.Text += string.Format("<img src = \"{0}\" /> ", GetImageUrl(checkBox.Text.Split('|')[0]));

                }
            }
            catch
            {
                   //Display Error Here
            }

}
    private string GetImageUrl(string id)
        {
            return string.Format("http://bceforms/Contact/imgs.aspx?ID=", id);
        }

目前的问题是它显示了边框,但出现的图像是未找到缩略图的图像,当我之前遇到此问题时,因为图像还没有数据绑定然而,当我在复选框列表上使用.databind();时,因为显然原始数据源没有图像,它只是删除图像

任何帮助都会得到赞赏

1 个答案:

答案 0 :(得分:0)

我认为在sql中保存图像数据不是一种好方法,而是可以将图像URL保存在sql中并保存图像文件。在代码的最后,您遇到了一个问题:

private string GetImageUrl(string id)
    {
        return string.Format("http://bceforms/Contact/imgs.aspx?ID=", id);
    }

您必须将其更改为:

private string GetImageUrl(string id)
    {
        return string.Format("http://bceforms/Contact/imgs.aspx?ID={0}", id);
    }

修好后,请告知结果。