ASP.NET的ItemTemplate用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.NET的ItemTemplate用法相关的知识,希望对你有一定的参考价值。

在用DataList控件的时候肯定的要用到itemtemplate,现在我就跟大家怎么用它
第一步:先把DataList控件绑定数据库中的某个表,代码如下:
SqlConnection con = new SqlConnection("server=.; uid=sa; pwd=密码; database=数据库");
SqlDataAdapter sd = new SqlDataAdapter("select ", con);
DataSet ds = new DataSet();
sd.Fill(ds, "LanMuName");
DataList1.DataSource = ds;
DataList1.DataBind();
第二步;再用itemtemplate绑定表里的某列,代码如下:
<asp:DataList ID="DataList1" runat="server" CellPadding="0">
<ItemTemplate>
<asp:Label ID= "CaptionLabel " runat= "server "
Text= '<%# DataBinder.eval_r(Container.DataItem,"shipname")%>'>
</ItemTemplate>
</asp:DataList>

通过上面两步就可以实现绑定了,现在我为大家解释一下
DataBinder.eval_r(Container.DataItem,"shipname")里各项是什么意思:

DataBinder:数据绑定管理器
Eval:求值
Container:被绑定到的容器,比如GridView,DataList等
DataItem:容器的数据项,包括项、交替模板行
shipname:绑定到容器的字段(来自数据库表字段即表中的列)
参考技术A 直接用table就可以了,在html4.0里面,table不仅仅有table,caption,tr,td这几个标签,还有tbody。

下面是我自己以前做过的一个项目,实现的功能就是标题只显示一次,数据循环输出。你可以根据需要修改一下即可。

<asp:Repeater ID="MyCart" runat="server" onitemcommand="MyCart_ItemCommand">
<HeaderTemplate>
<table border="1">
<caption>BabyPet ShoppingCart</caption>
<thead>
<tr>
<th>产品名称</th>
<th>产品价格</th>
<th>产品数量</th>
<th>移除</th>
</tr>
</thead>
<tbody>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><asp:Label id="LbName" runat="server" Text='<%#Eval ("ProductName") %>'></asp:Label>
<asp:HiddenField ID="HiddleProductId" runat="server" Value='<%# Eval("ProductId") %>' /></td>
<td><asp:Label id="LbPrice" runat="server" Text='<%#Eval ("ProductPrice") %>'></asp:Label> </td>
<td><asp:TextBox id="txtQuantity" runat="server" Text='<%#Eval ("ProductQuantity") %>' AutoPostBack="true" OnTextChanged="txtQuantity_TextChanged"></asp:TextBox>
<asp:HiddenField ID="HiddleProductQuantity" runat="server" Value='<%#Eval ("ProductQuantity") %>' /></td>
<td><asp:Button ID="DeleteBtn" runat="server" CommandName="Delete" Text="删除"/></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</tbody>
</table>

下面的图片就是我实现的效果,应该是你需要的.
本回答被提问者采纳
参考技术B 直接用table就可以了,在html4.0里面,table不仅仅有table,caption,tr,td这几个标签,还有tbody。

下面是我自己以前做过的一个项目,实现的功能就是标题只显示一次,数据循环输出。你可以根据需要修改一下即可。

<asp:Repeater ID="MyCart" runat="server" onitemcommand="MyCart_ItemCommand">
<HeaderTemplate>
<table border="1">
<caption>BabyPet ShoppingCart</caption>
<thead>
<tr>
<th>产品名称</th>
<th>产品价格</th>
<th>产品数量</th>
<th>移除</th>
</tr>
</thead>
<tbody>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><asp:Label id="LbName" runat="server" Text='<%#Eval ("ProductName") %>'></asp:Label>
<asp:HiddenField ID="HiddleProductId" runat="server" Value='<%# Eval("ProductId") %>' /></td>
<td><asp:Label id="LbPrice" runat="server" Text='<%#Eval ("ProductPrice") %>'></asp:Label> </td>
<td><asp:TextBox id="txtQuantity" runat="server" Text='<%#Eval ("ProductQuantity") %>' AutoPostBack="true" OnTextChanged="txtQuantity_TextChanged"></asp:TextBox>
<asp:HiddenField ID="HiddleProductQuantity" runat="server" Value='<%#Eval ("ProductQuantity") %>' /></td>
<td><asp:Button ID="DeleteBtn" runat="server" CommandName="Delete" Text="删除"/></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</tbody>
</table>

下面的图片就是我实现的效果,应该是你需要的.
另外,团IDC网上有许多产品团购,便宜有口碑
参考技术C <asp:TemplateField HeaderText="栏目图片" SortExpression="Pic">
<ItemTemplate>
<img src='<%# DataBinder.Eval(Container.DataItem,"Pic")%>‘ width=24 height=24 />
</ItemTemplate>
</asp:TemplateField>
参考技术D <ItemTemplate>
可以写你想让绑定的哪种类型的控件,以及赋值。
</ItemTemplate>

ASP.Net:ListView 的 ItemTemplate 中的条件逻辑

【中文标题】ASP.Net:ListView 的 ItemTemplate 中的条件逻辑【英文标题】:ASP.Net: Conditional Logic in a ListView's ItemTemplate 【发布时间】:2010-11-08 04:52:16 【问题描述】:

我想根据绑定字段是否为空来显示ItemTemplate 的某些部分。以如下代码为例:

(为简洁起见,已删除 LayoutTemplate 等代码)

<asp:ListView ID="MusicList" runat="server">
    <ItemTemplate>
        <tr>
            <%
                if (Eval("DownloadLink") != null)
                
            %>
            <td>
                <a href="<%#Eval("DownloadLink") %>">Link</a>
            </td>
            <%
                 %>
        </tr>
    </ItemTemplate>
</asp:ListView>

上面给出了以下运行时错误:

数据绑定方法,例如 Eval(), XPath() 和 Bind() 只能使用 在数据绑定控件的上下文中。

那么如何将一些条件逻辑(如上)放入ItemTemplate 中?

【问题讨论】:

这是目前让我有点发疯的事情。这在 ASP.net MVC 中非常简单,但在 webforms 中却是一场大戏 【参考方案1】:

如何将控件的“可见”属性绑定到您的条件?比如:

<asp:ListView ID="MusicList" runat="server">
   <ItemTemplate>
    <tr runat="server" Visible='<%# Eval("DownloadLink") != null %>'>
        <td>
            <a href='<%#Eval("DownloadLink") %>'>Link</a>
        </td>
    </tr>
   </ItemTemplate>
</asp:ListView>

【讨论】:

嗯,有趣的一点...但是在 ItemTemplate 中没有注入逻辑块的某种方法吗? 修改了您的答案以返回布尔值而不是字符串 我最近尝试过这个并得到一个运行时错误:“服务器标签格式不正确。” 我得到了同样的东西@Kyle,如果我找到解决办法,我一定会发布它。 修复了可能导致“服务器标签格式不正确”的锚标记中的引号。错误。【参考方案2】:

解决“服务器标签格式不正确”。对于涉及可见性的答案,请从 Visible= 参数中删除引号。

所以会变成:

<tr runat="server" Visible=<%# Eval("DownloadLink") != null ? true : false %>>

【讨论】:

您也可以只在条件周围使用单引号。我有双引号并得到“服务器标签格式不正确”但是当我将它们更改为单引号时它工作正常。【参考方案3】:

我不建议将此作为一种好方法,但您可以通过捕获 OnItemDataBound 事件中的当前项目,将其存储在公共属性或字段中,然后在条件逻辑中使用它来解决此问题。

例如:

<asp:ListView ID="MusicList" OnItemDataBound="Item_DataBound" runat="server">
    <ItemTemplate>
        <tr>
            <%
                if (CurrentItem.DownloadLink != null)
                
            %>
            <td>
                <a href="<%#Eval("DownloadLink") %>">Link</a>
            </td>
            <%
                 %>
        </tr>
    </ItemTemplate>
</asp:ListView>

并在服务器端将以下代码添加到您的代码隐藏文件中:

public MusicItem CurrentItem  get; private set;

protected void Item_DataBound(object sender, RepeaterItemEventArgs e)

   CurrentItem = (MusicItem) e.Item.DataItem;

请注意,此技巧不适用于 UpdatePanel 控件。

【讨论】:

【参考方案4】:

如果您有 2 个不同的结构要根据条件呈现,则使用面板

<asp:ListView ID="MusicList" runat="server">
    <ItemTemplate>
        <tr>
            <asp:Panel ID="DownloadNull" runat="server" Visible="<%# Eval("DownloadLink") == null %>" >
            <td> Album Description BlaBlaBla <img src="../images/test.gif"> </td>
            </asp:Panel>

            <asp:Panel ID="DownloadNotNull" runat="server" Visible="<%# Eval("DownloadLink") != null %>" >
            <td> Album Description BlaBlaBla <img src="../images/test.gif">
                <a href='<%# Eval("DownloadLink")' >Download</a>
                ..... 
            </td>
            </asp:Panel>
        </tr>
    </ItemTemplate>
</asp:ListView>

【讨论】:

以上是关于ASP.NET的ItemTemplate用法的主要内容,如果未能解决你的问题,请参考以下文章

ASP.Net GridView 和 TemplateField 可见性 - false 但 ItemTemplate 仍在执行

在asp.net中使用datalist绑定数据的话,怎么取消ul前面的符号

如何使用C#和ASP.NET将数据从Gridview行解析到另一个页面

ASP.NET 中如何用C#语言代码实现分页功能

如何解决asp.net中播放视频的问题

在 Asp.net Rowcommand 事件中获取行索引