Редизайн приложения из заданного количества изображений, хранящихся в других элементах для отображения, на переменное количество изображений, хранящихся во второй таблице.Динамическое отображение изображений из базы данных
Найден этот вопрос и начало модифицирования от него, но я получаю немного потеряли: ASP.Net Display Images in a GridView span across columns and rows? Using C#
У меня есть DataList управления для asp.net страницы построена, но знает деталь пути не будет работать:
<asp:DataList ID="dlImages" runat="server"
RepeatColumns ="2"
RepeatDirection ="Horizontal"
RepeatLayout ="Flow">
<ItemTemplate>
<asp:Image ID="ImageQ" runat="server" Width="150px" ImageUrl='<%# Bind("ImageFile", "~/photo/{0}") %>' />
</ItemTemplate>
</asp:DataList>
Но я потерялся, пытаясь получить данные в этот список. Первоначально данные изображения были загружены вместе с другой информацией через ниже:
protected void Page_Load(object sender, EventArgs e)
{
string sConstr = ConfigurationManager.ConnectionStrings["CS1"].ConnectionString;
SqlConnection Conn = new SqlConnection(sConstr);
using (Conn)
{
SqlCommand command = new SqlCommand("QuestionDetail", Conn);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@QuestionID", SqlDbType.BigInt));
command.Parameters["@QuestionID"].Value = Convert.ToInt32(Request["Id"]);
Conn.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
byte[] imgBytes = (byte[])reader["ImageFile"];
string encodedBytes = Convert.ToBase64String(imgBytes);
string url = string.Concat("data:image/jpg;base64,", encodedBytes);
Image1.ImageUrl = url;
byte[] imgBytes2 = (byte[])reader["ImageFile2"];
string encodedBytes2 = Convert.ToBase64String(imgBytes2);
string url2 = string.Concat("data:image/jpg;base64,", encodedBytes2);
Image2.ImageUrl = url2;
byte[] imgBytes3 = (byte[])reader["ImageFile3"];
string encodedBytes3 = Convert.ToBase64String(imgBytes3);
string url3 = string.Concat("data:image/jpg;base64,", encodedBytes3);
Image3.ImageUrl = url3;
byte[] imgBytes4 = (byte[])reader["ImageFile4"];
string encodedBytes4 = Convert.ToBase64String(imgBytes4);
string url4 = string.Concat("data:image/jpg;base64,", encodedBytes4);
Image4.ImageUrl = url4;
txt_QuestionID.Text = reader["Id"].ToString();
txt_author.Text = reader["Author"].ToString();
txt_Date.Text = reader["SubmitDate"].ToString();
txt_Stem.Text = reader["Stem"].ToString();
txt_RespA.Text = reader["RespA"].ToString();
txt_RespB.Text = reader["RespB"].ToString();
txt_RespC.Text = reader["RespC"].ToString();
txt_RespD.Text = reader["RespD"].ToString();
txt_RespE.Text = reader["RespE"].ToString();
txt_Answer.Text = reader["Answer"].ToString();
txt_Critique.Text = reader["Critique"].ToString();
txt_KeyObjective.Text = reader["KeyObjective"].ToString();
txt_References.Text = reader["References"].ToString();
txt_Practice1.Text = reader["PracticeArea1"].ToString();
txt_Practice2.Text = reader["PracticeArea2"].ToString();
txt_Practice3.Text = reader["PracticeArea3"].ToString();
txt_Practice4.Text = reader["PracticeArea4"].ToString();
txt_IsCloneOf.Text = reader["IsCloneOf"].ToString();
}
reader.Close();
}
}
Я взял части изображения, и пытаюсь обработать их в DataList через отдельный кодовый блок (и оставить текстовые элементы,) и иметь хранимую процедуру, которая будет захватывать соответствующие записи.
Этот раздел PageLoad загружает заполнители правильно на основе количества изображений, прикрепленных к каждому вопросу ,,, но как получить кодированное изображение прочитать вместо прохождения пути .....:
DataTable dt = new DataTable();
using (Conn)
{
SqlCommand ad = new SqlCommand("ImageDetail", Conn);
ad.CommandType = CommandType.StoredProcedure;
ad.Parameters.Add(new SqlParameter("@QuestionID", SqlDbType.BigInt));
ad.Parameters["@QuestionID"].Value = Convert.ToInt32(Request["Id"]);
SqlDataReader reader2 = command.ExecuteReader();
while (reader2.Read())
{
if(!Convert.IsDBNull(reader2["ImageFile"]))
{
byte[] imgBytes = (byte[])reader2["ImageFile"];
string encodedBytes = Convert.ToBase64String(imgBytes);
string url = string.Concat("data:image/jpg;base64,", encodedBytes);
}
}
reader2.Close();
dt.Load(reader2);
}
dlImages.DataSource = dt;
dlImages.DataBind();
По-прежнему полный noob, и каждый раз, когда я меняю элементы управления, мне требуется некоторое время, чтобы понять, как использовать новые. Прямо сейчас Код будет работать без ошибок, но без изображений. Мне пришлось добавить чек для «IsDBNULL», поскольку я продолжал получать эту ошибку. Я знаю, что таблица, к которой осуществляется доступ к хранимой процедуре ImageDetail, имеет нулевые нулевые значения в любой записи и что хранимая процедура возвращает записи при подаче QuestionID.
Это рабочий ответ. Поэтому сравните свой код с этим и выполните действия, и вы должны найти то, что вы пропустили здесь. Http://stackoverflow.com/a/33694399/2946329 –
@ S.Akbari. Одна из проблем, с которыми я столкнулся, заключается в том, что в обоих вопрос, с которым вы связались, и тот, который я упоминаю в моем вопросе, заключается в том, что оба объекта занимают адрес изображения. Я кодировал изображения в базе данных, которые необходимо получить и отобразить из кодированных данных. Я потерял, как включить читателя, который я использую в своем оригинальном приложении, и включить его в структуру любого из двух других сообщений. –
@ S.Akbari Отредактированный вопрос, чтобы попытаться сделать проблему более ясной. –