2015-07-21 110 views
0

我想添加“asp:Imagefield”到我的gridview,以便它可以显示基于房间类型的图像。可以说我们的房间类型是:单人,双人和家庭。基于这些我想要它也显示图像。在我的图像文件夹我有这些图像:Asp.net - 添加imagefield到gridview,并将其链接到数据类型字段

Double.jpg 
Single.jpg 
Family.jpg 

因此,对于所有双行(其中Type =“Double”),它应显示Double.jpg图像。

现在我的GridView看起来是这样的:

Nr Type Price Select (checkbox) 

我已经添加了像场,所以它看起来像现在这样:

Photo Nr Type Price Select 

一些代码:

<!-- Source control --> 
       <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:DefaultConnection %>"  SelectCommand="SELECT Nr, Type, Price 
FROM AspRooms r 
WHERE @adults &lt;= r.Adult AND @children &lt;= r.Children AND NOT EXISTS 
(
    SELECT 1 FROM Booking b 
    WHERE b.RoomNr = r.Nr 
    AND 
    (
     (CAST(@Checkin AS date) &gt;= b.CheckIn AND CAST(@Checkin AS date) &lt;= b.CheckOut) 
     OR (CAST(@Checkin AS date) &lt;= b.CheckIn AND CAST(@Checkout AS date) &gt;= b.CheckIn) 
    ) 
) 

"> 
        <SelectParameters>        
         <asp:ControlParameter ControlID="adults" Name="adults" PropertyName="SelectedValue" /> 
         <asp:ControlParameter ControlID="childrens" Name="children" PropertyName="SelectedValue" /> 
         <asp:ControlParameter ControlID="datetimepicker1" Name="Checkin" PropertyName="Text" /> 
         <asp:ControlParameter ControlID="datetimepicker2" Name="Checkout" PropertyName="Text" />       
        </SelectParameters> 
       </asp:SqlDataSource> 
       <!-- Gridview table --> 
       <asp:GridView ID="GridView1" runat="server" CssClass="table table-hover table-condensed" GridLines="None" AutoGenerateColumns="False" DataKeyNames="Nr" DataSourceID="SqlDataSource1" Width="100%"> 
        <Columns> 
         <asp:ImageField HeaderText="Rooms" DataImageUrlField="PhotoPath" ControlStyle-Height="150px" ControlStyle-Width="150px"> 

         </asp:ImageField> 
         <asp:BoundField DataField="Nr" HeaderText="Nr" ReadOnly="True" SortExpression="Nr" /> 
         <asp:BoundField DataField="Type" HeaderText="Type" SortExpression="Type" /> 
         <asp:BoundField DataField="Price" HeaderText="Price" SortExpression="Price" /> 

         <asp:TemplateField HeaderText="Select Room"> 
          <EditItemTemplate> 
           <asp:CheckBox ID="CheckBox1" runat="server" /> 
          </EditItemTemplate> 
          <ItemTemplate> 
           <asp:CheckBox ID="CheckBox1" runat="server" /> 
          </ItemTemplate> 
         </asp:TemplateField>       
        </Columns> 
       </asp:GridView> 

正如你可以在代码中看到的,我在t中使用了DataImageUrlField =“PhotoPath”他ImageField。在我的数据库中,我创建了一个名为PhotoPath的字段,其中包含nchar(20)的数据类型。形式是这样的:images/single.jpg

但是,当这个运行我得到一个错误,它说:在选定的数据源上找不到名称为'PhotoPath'的字段或属性。

任何可以看到我的代码中目前的错误?

+0

您的代码似乎不符合您的意见 - 查询不会选择一个名为'PhotoPath'的字段,并且'ImageField'不会查找名为'PhotoType'的字段。根据猜测,您已经忘记将该列添加到“SelectCommand”中,或者您在“ImageField”上使用了错误的字段名称 - 您称该列名为“PhotoPath”,但错误消息指的是'PhotoType'。 –

+0

哦,是的,我犯了一个拼写错误..错误是PhotoPath和试图将我的imageField链接到“PhotoPath”的字段我不想选择该字段并将其显示在我的GridView中,但是如何才能使字段“PhotoPath”availeble? – Mikkel

+0

您必须将该列添加到“SelectCommand”以绑定到它。您已指定'AutoGenerateColumns =“False”',因此它不会自动显示为单独的列。 –

回答

1

您需要将PhotoPath列添加到SelectCommand,并更新ImageField以使用该列。

由于您设置了AutoGenerateColumns="False",因此此列不会自动显示为单独的列。

您还可以简化测试重叠订舱:

[my check in] <= [booking check out] 
AND 
[my check out] >= [booking check in] 

这将找到的任何现有预订重叠的新的预订。您当前的查询仅查找完全包含新预订的预订,或者在新预订期间开始的预订。在新预订开始之前开始的预订并不会被发现。

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:DefaultConnection %>" 
    SelectCommand="SELECT Nr, Type, Price, PhotoPath 
FROM AspRooms r 
WHERE @adults &lt;= r.Adult AND @children &lt;= r.Children AND NOT EXISTS 
(
    SELECT 1 FROM Booking b 
    WHERE b.RoomNr = r.Nr 
    AND CAST(@Checkin AS date) &lt;= b.CheckOut 
    AND CAST(@Checkout AS date) &gt;= b.CheckIn 
)"> 
<SelectParameters>        
    <asp:ControlParameter ControlID="adults" Name="adults" PropertyName="SelectedValue" /> 
    <asp:ControlParameter ControlID="childrens" Name="children" PropertyName="SelectedValue" /> 
    <asp:ControlParameter ControlID="datetimepicker1" Name="Checkin" PropertyName="Text" /> 
    <asp:ControlParameter ControlID="datetimepicker2" Name="Checkout" PropertyName="Text" />       
</SelectParameters> 
</asp:SqlDataSource> 


<asp:GridView ID="GridView1" runat="server" 
    DataSourceID="SqlDataSource1" DataKeyNames="Nr" 
    CssClass="table table-hover table-condensed" GridLines="None" AutoGenerateColumns="False" Width="100%" 
> 
<Columns> 
    <asp:ImageField HeaderText="Rooms" 
     DataImageUrlField="PhotoPath" 
     ControlStyle-Height="150px" 
     ControlStyle-Width="150px" 
    /> 
    <asp:BoundField DataField="Nr" HeaderText="Nr" ReadOnly="True" SortExpression="Nr" /> 
    <asp:BoundField DataField="Type" HeaderText="Type" SortExpression="Type" /> 
    <asp:BoundField DataField="Price" HeaderText="Price" SortExpression="Price" /> 

    <asp:TemplateField HeaderText="Select Room"> 
    <EditItemTemplate> 
     <asp:CheckBox ID="CheckBox1" runat="server" /> 
    </EditItemTemplate> 
    <ItemTemplate> 
     <asp:CheckBox ID="CheckBox1" runat="server" /> 
    </ItemTemplate> 
    </asp:TemplateField>       
</Columns> 
</asp:GridView> 
相关问题