Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Прошу помощи для студента.Вопрос о Repeater.


Автор: shark1 2.3.2008, 13:44
Вот пытаюсь сделать выборку с помощю Repeater.Пишу так :
Код

<asp:Repeater ID="Repeater1" runat="server" 
DataSourceID="SqlDataSource1" >
    <HeaderTemplate><asp:Label runat="server" ID="Header1" 
        BackColor="DarkOrange" ForeColor="ActiveCaptionText"
        Font-Bold="true" Font-Underline="true" Font-Size="Large">
        We present our valued Employees!</asp:Label>
        <table>
    </HeaderTemplate>
    <ItemTemplate>
        <tr>
         <td>
           <asp:Panel ID="Panel1" runat="server" 
            BackColor="LightPink">
           <asp:Image ID="Photo" runat="server" ImageUrl=<%# Eval("PhotoPath")%>/>
               <%# Eval( "TitleOfCourtesy") %>
               <%# DataBinder.Eval(Container.DataItem,"FirstName") %>
               <%# DataBinder.Eval(Container.DataItem,"LastName") %>
               was born in <%# Eval("BirthDate","{0:dd.MM.yyyy}") %>.<p>
               <%# Eval("TitleOfCourtesy").ToString() == "Mr." 
|| Eval("TitleOfCourtesy").ToString() == "Dr." ? "He" : "She"%>
               lives in beautiful city 
               <%# ((System.Data.DataRowView)Container.DataItem)["City"]%>,
               <%# Eval( "Region") %> in
               <%# DataBinder.Eval(Container.DataItem,"Country") %>.</p>
               <p>We appreciate <%# Eval("TitleOfCourtesy").ToString() == "Mr." || 
                  Eval("TitleOfCourtesy").ToString() == "Dr." ? "his" : "her"%> 
                  work as <%# Eval("Title") %>.</p>
               <p><%# DataBinder.Eval(Container.DataItem,"Notes") %></p>
            </asp:Panel>
         </td>
       </tr>
    </ItemTemplate>
    <FooterTemplate>
    </table></FooterTemplate>
</asp:Repeater> 
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
        SelectCommand="SELECT * FROM [Employees]" 
></asp:SqlDataSource>


но почемуто фото не отображаются,хотя во время что я определяю SqlDataSource я фото вижу.Зарание спасибо. 

Автор: Mymik 2.3.2008, 19:33
я подозреваю, что фото не отображается по той причине, что ImageUrl не правильный. Т.е. туда подставляется какой-то путь, но он наверняка относительный, а значит он вычисляется относительно url в адресной строке браузера.

Автор: anonym 2.3.2008, 22:13
Или другой вариант - фото лежат в какой-нибудь защищённой папке типа App_Data или App_Code.

Автор: shark1 2.3.2008, 23:25
Mymik вы правы,фото не наместе,но вот что странно,когда я создавал SqlDataSource,я же их видел ?Странно.А тогда можно небольшой римерчик ,как отобразить картинки на странице.Зарание спасибо.

Автор: Mymik 3.3.2008, 09:50
Цитата(shark1 @  2.3.2008,  23:25 Найти цитируемый пост)
когда я создавал SqlDataSource,я же их видел ?
А причем тут SqlDataSource к картинкам ??? он выбирает данные из базы и отдает их кому-либо. Я что-то не понимаю ход твоих мыслей.

Цитата(shark1 @  2.3.2008,  23:25 Найти цитируемый пост)
А тогда можно небольшой римерчик ,как отобразить картинки на странице
Обычно делают двумя способами. Первый способ очень простой
Код

<img src="images/bla-bla.jpg" width="80px" height="10px" alt="" title="" />

Но он очень не подходит для Friendly Url, да и потом, при использовании masterpages часто бывает, что страницы находятся в разных подкаталогах. Вобщем очень неудобный вариант.
Потому в asp.net есть такой контрол, как Image, и все пути который начинаются с "~/" asp.net преобразует и дает правильный путь начинающийся от корневого каталога WebSite'а. Т.е. к примеру у тебя все та же bla-bla.jpg хранится в images, ты пишешь такую вот ахинею -->>
Код

<asp:Image ImageUrl="~/images/bla-bla.jpg" ToolTip="" Width="80" Height="10" runat="server"/>

И теперь ты можешь видеть эту картинку в любом подкаталоге.


Автор: shark1 3.3.2008, 10:54
Mymik спасибо большое это я усвоил.А вот как теперь сделать чтоб для каждого FirstName,LastName чтоб получали каждый свою фотографию.Большое спасибо.

Автор: Mymik 3.3.2008, 13:28
дык ты ж используешь Repeater, ты забираешь данные из субд, возможно там у всех твоих записей одинаковые картинки. Измени данные в СУБД и ты увидишь как картинки изменятся.

Автор: shark1 4.3.2008, 20:48
Mumik спасибо за помощь,но в том то и дело что в базе разние картинки :(.А немогли бы вы для меня непутевого набросать маленький примерчик.Просто очень хочетса научитса как из базы доставать картинки и чтоб они становились в нужные места.Зарание спасибо.

Автор: Mymik 4.3.2008, 22:54
Цитата(shark1 @  4.3.2008,  20:48 Найти цитируемый пост)
Mumik спасибо за помощь,но в том то и дело что в базе разние картинки :(.А немогли бы вы для меня непутевого набросать маленький примерчик.Просто очень хочетса научитса как из базы доставать картинки и чтоб они становились в нужные места.Зарание спасибо. 

ну во-первых я Mymik. 
Во-вторых нет. Давай сам пиши. Показывай приходящие данные. Или приведи пример базы данных покажи что возвращает. Что ж тут не работает.

Автор: shark1 5.3.2008, 09:57
Mymik извени.База(Access) выглядит так :
ID-Autonumber
FirstName-text
FirstName-text
Photo-OLE Object
Link -text(папка на компе где хранятся photo)
возвращает все данние,только вместо картинок показивает ярлычки.
Делаю так:
Код

<asp:Panel ID="Panel2" runat="server" 
            BackColor="Cyan">
           <asp:Image ID="Photo" runat="server" ImageUrl=<%# Eval("Photo")%/>               
               <%# DataBinder.Eval(Container.DataItem,"FirstName") %>
               <%# DataBinder.Eval(Container.DataItem,"LastName") %>             
            </asp:Panel>

если меняю :
Код

<asp:Image ID="Photo" runat="server" ImageUrl=<%# Eval("Photo")%/>

на 
Код

<asp:Image ID="Image1" ImageUrl="~/images/1.jpg" ToolTip="" Width="80" Height="40" runat="server"/>

то тогда вижу(понятное дело,после того как ты мне подсказал)у всех одну и туже фотографию.
Подскажи в чем я ошибаюсь.Зарание спасибо.

Автор: Mymik 5.3.2008, 10:33
shark1, ну так ты ж везде подставляешь одинаковый ImageUrl, а тебе нужно подставлять его.
при это, у тебя поле Photo является OLE (т.е. там внутри храняться уже файлы). Следовательно, для того чтобы отобразить это поле, тебе нужно создать отдельный файл. Желательно ashx (Web Handler). В который ты будешь передавать ID записи и по этому ID будешь вытаскивать Photo из базы и писать эти данные в Response.
http://www.aspfree.com/c/a/ASP.NET/Retrieving-Images-from-a-Database--C---Part-II/, но там они реализовывают через ViewImage.aspx файл, что тебе не нужно, это не правильно по той причине, что в aspx очень длинный цикл жизни, а у ashx вызывается только один метод и все (т.е. прирост в скорости).

Добавлено через 5 минут и 51 секунду
мдя... но если у тебя есть поле Link где хранятся фото... хм, тогда действуем по другому smile
Тогда представим что в Link хранится что-то типа "1.jpg" И ты знаешь, что все эти файлы хранятся в "~/images/users/"
Из этого следует, что наш Image в Repeater'е должен выглядить вот так вот -->>
Код

<asp:Image ImageUrl='<%# String.Concat("~/images/user/", Eval("Link")) %>' ToolTip='<%# String.Concat("Photo of ", Eval("FirstName"), " ", Eval("LastName")) %>'  runat="server"/>

Вот и все. Вот так вот все должно работать smile

Автор: shark1 5.3.2008, 21:09
Да чтож я такой непутевый,и так у меня не работает,пишет ошибку что адресс фото не коректный,сделал другую DB,оставил только имя,фамилия и линк(это где в папке хранятся картинки),и все равно не показивает :( :(.

Автор: MaxWave 5.3.2008, 21:31
shark1
Код

<%# Eval("photoPath") %> 

Эммм, у тебя случаем не подсвечивается строчка красным??? Чтобы забиндить свойство контрола нужно выражение обернуть в кавычки!

Вот так: 
Код

ImageUrl="<%# Eval(...) %>"


Но тогда в скобки нельзя будет записать слово в кавычках. И Eval заюзать не выйдет...

Сделай функцию getImage внутри класса страницы и возвращай путь.. Типа так
Код

ImageUrl="<%# getImage() %>"

Автор: shark1 5.3.2008, 22:05
одну секундочку,почему если я делаю так в обычной таблице:ImageUrl="C:\Documents\images\1.jpg"
то я все равно не вижу картинку,может что то в настройках :(.Спасибо.

Автор: MaxWave 5.3.2008, 22:51
Да, странно.  smile  Тогда придется переместить все картинки в папку с сайтом. Теперь уж точно загрузятся.

Автор: shark1 5.3.2008, 23:17
Да так работает :ImageUrl="~/image/1.jpg.
Я просто не успел ответить,я сделал так :
<td style="width: 100px">
                <asp:Image ID="Image2" runat="server" ImageUrl="~/image/1.jpg" />
                </td>
но вопрос с Repeater так и не решил,подскажи плиззз как сделать функцию getImage внутри класса страницы.Зарание спасибо большое.

Автор: MaxWave 6.3.2008, 00:06
примерно так:

Код

public string getImagePath()
{
return Eval ("PhotoPath").ToString();
}

Автор: shark1 6.3.2008, 00:42
MaxWave спасибо тебе огромное но увы и так тоже не работает. :( не понимаю в чем дело.Может быть можно подругому как то вытащить фото из DB.Спасибо.

Автор: Mymik 6.3.2008, 01:23
Цитата(shark1 @  5.3.2008,  22:05 Найти цитируемый пост)
одну секундочку,почему если я делаю так в обычной таблице:ImageUrl="C:\Documents\images\1.jpg"
то я все равно не вижу картинку,может что то в настройках :(.Спасибо. 

это политика браузеров. Нельзя обращаться из интернета к локальным ресурсам (за исключением нескольких файлов из временных файлов)

Открой исходный код страницы и посмотри почему image указывает на ошибочный путь. Посмотри что в этом путе не правильного и тогда уже исправляй. А так, сетовать на то что у тебя что-то не получается, но при этом ничего не показывать... ну вобщем мы конечно уже мастера яснослышанья, но все же никак не можем тебе помочь... наверное это только на некоторых действует.

Автор: shark1 6.3.2008, 15:08
Mymik странно но фото лежит дествительно в этой папке.Ладно.Но всетаки прошу пожалусто если можно для примера киньте какой нибудь примерчик кот. работает с DB(Access или SQL),чтоб посмотреть как же можно так сделать чтоб доставать катринки из DB и чтоб они становились в нужные места.Зарание огромное спасибо.

Автор: MaxWave 6.3.2008, 21:07
У тебя картинки где? В базе или на диске? Если на диске то должны быть в папке с айтом. Если в БД то тут надо по своему выковыривать. Если у тебя в БД пути прописаны с файлам на диске, то пути соответственно должны быть корректными.

Автор: shark1 7.3.2008, 14:34
У меня есть db Access с путями к фотографиям или можно попробовать и просто чтоб картинки были на диске в какойто папке.Если можно то я би хотел посмотреть как делается и в одном и в другом случае.Как же это работает.Зарание спасибо.

Автор: shark1 7.3.2008, 21:51
Плиззззз подскажите не оставляйте меня так,подскажите пожалусто.Спасибо.

Автор: shark1 11.3.2008, 10:50
Уважаемые учителя.Плиззз, перебрал море вариантов  smile  smile  smile но так и не получилось вытащить картинку из DB(Access).Плиззз подскажите пожалусто,помогите примером.Зарание спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)