有没有办法通过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();
时,因为显然原始数据源没有图像,它只是删除图像
任何帮助都会得到赞赏
答案 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);
}
修好后,请告知结果。