Haechtsuppe Ответов: 2

Как отобразить изображения в ASP net gridview из папки


Всем привет,

Я хочу отобразить изображение из папки веб-сервера на основе значений строк.
База данных довольно проста, всего два столбца (string username, int state) мы получим состояние на основе приложения WPF, и есть два состояния: 0,1
Это работает, это хорошо, но я хочу показать результаты через платформу веб-приложений компании.

Я начал с простого GridView и добавил дополнительный столбец для изображения:

        <asp:GridView ID="Grid1" PageSize="50" DataSourceID="LinqStateSource" AllowPaging="True" OnRowDataBound="GridView1_RowDataBound"ShowFooter = "True" 

 AllowSorting="True" runat="server" AutoGenerateColumns="False">
    <Columns>
        <asp:BoundField DataField="username" HeaderText="Username" SortExpression="username" />
        <asp:BoundField DataField="state" HeaderText="State" SortExpression="State" />
        <asp:ImageField HeaderText="Picture" />
    </Columns>
</asp:GridView>

<!--- LINQ! ---!>
<asp:LinqDataSource ID="LinqStateSource" runat="server" ContextTypeName="...WebApp.data.LinqStateSourceDataContext" EntityTypeName="" TableName="tblname"/>


Пока это работает, но теперь я хочу показать картинку (зеленые, красные точки) вместо столбца "состояние".

В коде позади я начал с этого:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
       {

           foreach (GridViewRow row in Grid1.Rows)
           {
               for (int i = 0; i < Grid1.Columns.Count; i++)
               {
                   /*if(e.Row.Cells[1].Text== "1")
                       e.Row.Cells[2].Image = @"...\images\greendot.ico";
                        |_______ "mindcode"
                   else
                       e.Row.Cells[2].Image = @"...\images\reddot.ico";
                        |_______ "mindcode"
                      /*
               }
           }

       }


Я понятия не имею, как это сделать.

Спасибо,
Винсент

Что я уже пробовал:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
       {

           foreach (GridViewRow row in Grid1.Rows)
           {
               for (int i = 0; i < Grid1.Columns.Count; i++)
               {
                   /*if(e.Row.Cells[1].Text== "1")
                       e.Row.Cells[2].Image = @"...\images\greendot.ico";
                        |_______ "mindcode"
                   else
                       e.Row.Cells[2].Image = @"...\images\reddot.ico";
                        |_______ "mindcode"
                      /*
               }
           }

       }

2 Ответов

Рейтинг:
7

Richard Deeming

Другой вариант: привязать изображение в разметке, используя функцию code-behind для генерации URL-адреса:

<asp:Image runat="server"

    ImageUrl='<%# BuildStateImageUrl((int)Eval("State")) %>'

/>

protected string BuildStateImageUrl(int state)
{
    switch (state)
    {
        case 1:
        {
            return "~/images/greendot.png";
        }
        default:
        {
            return "~/images/reddot.png";
        }
    }
}

NB: Файл значка (.ico) не гарантированно работают во всех браузерах. Вместо этого вы должны конвертировать файлы в один из стандартных веб-форматов (.png, .jpg или .gif).


Рейтинг:
18

njammy

Мне проще сделать один из следующих вариантов:

Вариант 1: привязка в разметке:
1. Подготовьте свой источник данных для включения url-адреса в запрос (возможно, поместите некоторую логику стиля "case when" в ваш запрос БД). например, выберите url-адрес как imageUrl из myTable...
2. Привязать Источник изображения URL-адрес контролировать по разметке
напр.
&ЛТ;ИМГ СРЦ="&ЛТ;%#Ивала("url_изображения")" /&ГТ;

Вариант 2: добавить элемент управления изображением в привязку данных строк

string imageUrlValue = @"...\images\{0}.ico";
            DataRow myRow = e.Row.DataItem as DataRow;
            Image img = new Image();
            img.ImageUrl = 
                string.Format
                (
                    imageUrlValue,
                    myRow["Mycolumn"] == "1" ? "greendot" : "reddot"
                );
            row.Cells[2].Controls.Add(img);