#c# #asp.net
#c# #asp.net
Вопрос:
Я загружаю имена и изображения из базы данных и динамически добавляю их в элемент управления панели. Я хочу, чтобы под этим изображением отображалось изображение и имя. Но метка имени находится не совсем под изображением. Есть ли способ добавить метку относительно кнопки изображения?
Это мой код, который загружает изображения и имена из базы данных:
string query1 = "SELECT photo,name FROM Artist";
using(var conn = new SqlConnection("connectionStringHere"))
using(SqlCommand cmd = new SqlCommand(query1, conn))
{
conn.Open();
using(SqlDataReader reader = cmd.ExecuteReader())
{
while(reader.Read())
{
byte[] bytes = (byte[])reader.GetValue(0);
string strBase64 = Convert.ToBase64String(bytes);
ImageButton imgButton = new ImageButton();
imgButton.ImageUrl = "data:Image/png;base64," strBase64;
imgButton.Width = Unit.Pixel(200);
imgButton.Height = Unit.Pixel(200);
imgButton.Style.Add("padding", "5px");
imgButton.Click = new ImageClickEventHandler(imgButton_Click);
Panel1.Controls.Add(imgButton);
Label lbl = new Label();
lbl.Text = reader.GetString(1);
lbl.CssClass = "imageLable"; // style it in your .css file
Panel1.Controls.Add(lbl);
}
}
}
Это то, что я получаю на экране:
Комментарии:
1. Вы пробовали создавать поле метки и динамически задавать его текстовое значение? msdn.microsoft.com/en-us/library /…
2. Вы пробовали создать новую метку, присвоив ее текст значению name и добавив его на панель после кнопки imagebutton?
Ответ №1:
В вашем ADO.NET код.
- Всегда оборачивайте все, что реализует IDisposable, в using blocks.
- Область подключений к методу, в котором они используются. Sql Server будет обрабатывать пул соединений, поэтому используйте его и утилизируйте, не используйте повторно.
Исправление вашего вопроса заключается в том, чтобы добавить новую метку на вашу панель, а затем оформить ее так, как вы считаете нужным.
string query1 = "SELECT photo,name FROM Artist";
using(var conn = new SqlConnection("connectionStringHere"))
using(SqlCommand cmd = new SqlCommand(query1, conn))
{
conn.Open();
using(SqlDataReader reader = cmd.ExecuteReader())
{
while(reader.Read())
{
byte[] bytes = (byte[])reader.GetValue(0);
string strBase64 = Convert.ToBase64String(bytes);
ImageButton imgButton = new ImageButton();
imgButton.ImageUrl = "data:Image/png;base64," strBase64;
imgButton.Width = Unit.Pixel(200);
imgButton.Height = Unit.Pixel(200);
imgButton.Style.Add("padding", "5px");
imgButton.Click = new ImageClickEventHandler(imgButton_Click);
Panel1.Controls.Add(imgButton);
Label lbl = new Label();
lbl.Text = reader.GetString(1); // use GetString, not GetValue here
lbl.CssClass = "imageLable"; // style it in your .css file
Panel1.Controls.Add(lbl);
}
}
}
Комментарии:
1. Проблема в том, что я загружаю несколько изображений подряд. Таким образом, метка не отображается точно под кнопкой изображения. Есть ли способ настроить метку относительно кнопки изображения? Я обновлю вопрос и добавлю снимок экрана, чтобы он был более понятным.
2. @EL323 — это зависит от HTML. Вы могли бы обернуть ImageButton и Label в a,
div
а затем написать немного CSS, чтобы поместить метку под и в центр кнопки изображения. Это просто зависит от того, как вы хотите, чтобы он был структурирован, но есть много способов сделать это.3. ОК. Спасибо. Я попробую это. Мне не очень нравится CSS.
4. @EL323 — вы хотите, чтобы изображения располагались в стопке или рядом друг с другом с надписью внизу?
5. Изображения рядом друг с другом с надписью внизу.
Ответ №2:
Вам просто нужно добавить метку под кнопкой изображения:
string query1 = "SELECT photo, name FROM Artist";
SqlCommand cmd = new SqlCommand(query1, conn);
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
byte[] bytes = (byte[])reader.GetValue(0);
string strBase64 = Convert.ToBase64String(bytes);
ImageButton imgButton = new ImageButton();
imgButton.ImageUrl = "data:Image/png;base64," strBase64;
imgButton.Width = Unit.Pixel(200);
imgButton.Height = Unit.Pixel(200);
imgButton.Style.Add("padding", "5px");
imgButton.Click = new ImageClickEventHandler(imgButton_Click);
Panel1.Controls.Add(imgButton);
Label lbl = new Label();
lbl.Text = reader.GetValue(1);
// TODO: add styling and sizing parameters here
Panel1.Controls.Add(lbl);
}
Вам нужно будет добавить стиль к этой метке, и поскольку она не является частью кнопки изображения, она не будет ссылкой. Если вы хотите, чтобы он был интерактивным, вам следует изменить значение ImageButton
на a Link
, а затем добавить Image
и Label
внутри элемента Link
управления.