【问题标题】:Adding a picture to a checkbox list after binding绑定后将图片添加到复选框列表
【发布时间】:2017-06-28 21:28:09
【问题描述】:

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

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

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

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();在复选框列表上,因为它显然原始数据源没有图像,它只是删除了图像

任何帮助将不胜感激

【问题讨论】:

    标签: c# html asp.net checkbox


    【解决方案1】:

    我不认为将图像数据保存在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);
        }
    

    修复此问题后,请告知结果。

    【讨论】:

    • 效果很好!谢谢!
    猜你喜欢
    • 2013-07-27
    • 2015-04-04
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2017-04-14
    • 2018-01-03
    • 1970-01-01
    相关资源
    最近更新 更多