repeater应用的问题

repeater应用的问题

在repeater 里面放了一个HyperLink2,,后台代码里面是认不到的,,请问各位高手
类似问题怎么解决

前台代码:
<body>
    <form id="form1" runat="server">
    <div>
        <asp:HyperLink ID="HyperLink1" runat="server" Height="27px" Width="81px">HyperLink</asp:HyperLink>
      
        <asp:Repeater ID="Repeater1" runat="server">
        
        <ItemTemplate>
            <table>
                <tr>
                    
                    <td>
                       <%#Eval("lhttp") %> <%#Eval("lpath") %>
                        <asp:HyperLink ID="HyperLink2" runat="server">HyperLink</asp:HyperLink>
                    </td>
                    
                </tr>
            </table>
        </ItemTemplate>
        </asp:Repeater>
    </div>
    </form>
</body>


后台代码:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        
        
        getcon gh = new getcon();//是我自定义一个类
        DataSet o = gh.GetConnString("select * from httplogo order by id","httplogo");类里的方法,返回是一个dataset
        Repeater1.DataSource = o;
        Repeater1.DataBind();
        DataRowView my = o.Tables["httplogo"].DefaultView[0];
        HyperLink1.ImageUrl =Convert.ToString(my.Row["lpath"]);           
        HyperLink1.NavigateUrl = Convert.ToString(my.Row["Lhttp"]);      
        HyperLink2.ImageUrl = Convert.ToString(my.Row["lpath"]);
       HyperLink2.NavigateUrl = Convert.ToString(my.Row["Lhttp"]);
        
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<asp:Repeater ID="rpt1" runat="server"   >
   <ItemTemplate>
      <table width="777" border="0" cellpadding="0" cellspacing="1" bgcolor="#009900" class="tb">
        <!--DWLayoutTable-->
<tr>
<td align="center" valign="middle" bgcolor="#FFFFFF" style="height: 25px">姓名:<%#DataBinder . Eval(Container .DataItem ,"username")%></td>
</tr>
<tr>
<td height="20" colspan="2" align="left" valign="top" bgcolor="#FFFFFF">ID:<%#DataBinder . Eval(Container .DataItem ,"id")%> </td>
  <asp:LinkButton ID="LinkButton2" runat="server" OnClick="LinkButton2_Click" >删除</asp:LinkButton>
<td align="left" valign="middle" bgcolor="#FFFFFF" style="height: 10px">  时间:<%# DataBinder .Eval (Container .DataItem ,"createtime") %></td>
</tr>
</table>
  </ItemTemplate>
  </asp:Repeater>
protected void Page_Load(object sender, EventArgs e)
    {
      showInformation();

   
    }
  private string myconnectionstring = "server=127.0.0.1;uid=sa;pwd=;database=BBS;";
    protected void showInformation()
    {

        SqlConnection myconnection = new SqlConnection(myconnectionstring);
         string sql = "select * from content order by id desc";
         SqlCommand mycommand = new SqlCommand(sql, myconnection);
         myconnection.Open();
         SqlDataReader  myreader = mycommand.ExecuteReader();
         rpt1.DataSource = myreader;
         rpt1.DataBind();
        
}
  protected void LinkButton2_Click(object sender, EventArgs e)
{
}

TOP

你这样有错
你的LinkButton2是放在Repeater里面的
Repeater 是数据容器
在里面的控件在后台是无法直接找到的!
你可以把她写到Repeater的ItemCommand事件中
然后在你的LinkButton2控件上加一个属性CommandArgument
和一个CommandName属性  
其中属性CommandArgument就用来绑定你的ID

写法是
<asp:LinkButton ID="LinkButton2" CommandName="Delete" CommandArgument='<%#DataBinder . Eval(Container .DataItem ,"id")%>' runat="server">删除</asp:LinkButton>
CommandName属性可以自己定义值

在Repeater的ItemCommand时间中的写法是
switch (e.CommandName)
{
case "Delete":
string sql = "Delete from content where id = "+e.CommandArgument.ToString();
break;
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 

用Repeater控件显示数据

开发者在线 Builder.com.cn 更新时间:2007-09-03作者:中国IT实验室 来源:中国IT实验室

本文关键词: 数据 Repeater

  如果你正在使用ASP.NET,你一定对DataGrid控件非常熟悉。DataGrid控件提供了各种特性,通过这些特性可以很容易地在一个Web页面上以列表形式显示数据。但是,如果你不想使用HTML表格形式呢?此时,可以使用一个DataGrid的一个鲜为人知的兄弟控件,即Repeater控件。Repeater控件提供显示你所需要数据的灵活性。

  Repeater控件是什么?

  Repeater是一个可重复操作的控件,也就是说,它通过使用模板显示一个数据源的内容,而你可以很容易地配置这些模板。Repeater包含如标题和页脚这样的数据,它可以遍历所有的数据选项并应用到模板中。

  与DataGrid和DataList控件不同,Repeater控件并不是由WebControl类派生而来。所以,它不包括一些通用的格式属性,比如控制字体,颜色,等等。然而,使用Repeater控件,HTML(或者一个样式表)或者ASP.NET类可以处理这些属性。

  HTML在哪里?

  Repeater控件与DataGrid (以及DataList)控件的主要区别是在于如何处理HTML。ASP.NET建立HTML代码以显示DataGrid控件,但Repeater允许开发人员决定如何显示数据。所以,你可以选择将数据显示在一个HTML表格中或者一个顺序列表中。这主要取决于你的选择,但你必须将正确的HTML插入到ASP.NET页面中。

  模板与DataList一样,Repeater控件只支持模板。以下的模板可供选择:

  AlternatingItemTemplate: 指定如何显示每一其它选项。
  ItemTemplate: 指定如何显示选项。(AlternatingItemTemplate可以覆盖这一模板。)
  HeaderTemplate: 建立如何显示标题。
  FooterTemplate: 建立如何显示页脚。
  SeparatorTemplate: 指定如何显示不同选项之间的分隔符。

  你可以使用这些模板来显示你希望的数据。唯一具有强制性的模板是ItemTemplate,所有其它的模板都是具有选择性的。

  数据

  对于处理一个数据源,Repeater控件具有与DataGrid与DataList相同的属性:

  DataMember:获得或者设置与 Repeater 控件绑定的相应DataSource属性的表格。

  DataSource:获得或者设置为 Repeater 显示提供数据的数据源。

  除此之外,还有一个Items属性,你可以通过这一属性编程访问Repeater数据中单一选项。它返回一个RepeaterItemCollection对象,为一组RepeaterItem对象的集合,代表 Repeater 数据的每一行。

  ASP.NET Web数据控件还有其它一个共性:它们都使用DataBind方法来生成用户界面。调用这一方法可以返回并显示数据(假设DataSource和DataMember属性设置正确)。在查看DataBind方法之前,我们先看看如何在一个Web页面中使用一个Repeater控件。

  使用Repeater控件

  使用Repeater控件的第一步骤是决定我们将要使用的数据源和字段。例如,我们将要使用SQL Server Northwind数据库中的Employees列表。Web页面将显示职工的完整名字,地址,以及电话号码。HTML将使用DIV标记,用 Repeater 模板来分隔内容。下面是 Web 页面的 HTML 内容:

<%@ Page language="c#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html><head>

<title>Builder.com Repeater Example</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<style>
.alternate {
FONT-WEIGHT: bold;
COLOR: black;
FONT-FAMILY: Verdana, 'Times New Roman';
BACKGROUND-COLOR: yellow
}
.row {
FONT-WEIGHT: bold;
COLOR: black;
FONT-FAMILY: Verdana, 'Times New Roman';
BACKGROUND-COLOR: white
}
.footer {
FONT-WEIGHT: bold;

COLOR: red;
FONT-FAMILY: Verdana, 'Times New Roman';
BACKGROUND-COLOR: gray
}
.header {
FONT-WEIGHT: bold;
COLOR: yellow;
FONT-FAMILY: Verdana, 'Times New Roman';
BACKGROUND-COLOR: gray
}
.box {
BORDER-RIGHT: blue groove;
BORDER-TOP: blue groove;
DISPLAY: block;
VERTICAL-ALIGN: baseline;
OVERFLOW: auto;
BORDER-LEFT: blue groove;
CURSOR: wait;
BORDER-BOTTOM: blue groove;
FONT-FAMILY: verdana;
TEXT-ALIGN: center
}
body {
background: #333;
}
</style>
<script language="C#" runat="server">
private void Page_Load(object sender, System.EventArgs e) {
if (!IsPostBack) {
DataSet dset = new DataSet();
string conn = "server=(local);Initial Catalog=Northwind;UID=ctester;PWD=password";
string qry = "SELECT firstname, lastname, address, city, region, postalcode,
homephone FROM employees";
SqlDataAdapter sda = new SqlDataAdapter(qry, conn);
sda.Fill(dset);
Repeater1.DataSource = dset.Tables[0].DefaultView;
Repeater1.DataBind();
} }
</script></head>
<body MS_POSITIONING="GridLayout" bgColor="#00cc99">
<form id="Form1" method="post" runat="server">
<div >
<%# ((DataView)Repeater1.DataSource).Count + " employees found." %>
</div></FooterTemplate>
</asp:Repeater></div></form></body></html>

  可以注意到,每个 Repeater 行中样式表控制着文字的外观。除此之外,在网页内容中还添加了一个文本框。嵌入式 C# 代码从 Repeater 的数据源中获取相应的列。每个数据项都被转换成一个DataRowView对象以便显示。

  这一页面并不是使用ASP.NET的“后台代码”性质。由于这一原因,页面引用了两个System.Data和System.Data.SqlClient空间名称。这对于使用DataRowView对象和与 SQL Server 交互访问是必需的。

  当调用页面时就会触发Page_Load事件。此时会把数据源连接到 Repeater 控件上,并查询数据库。每一Repeater行的代码从潜在数据源中载入数据,并且Web页面显示这些数据。

  这一设计使用了样式表(以及 HTML div 标记),所以更改外观只需要更改必要的样式表代码。为了进一步地将数据和显示分离,你可以在一个独立文件中存储样式表,并以一个HTML LINK标记来引用它们。

  一个很好的选择

  当与其他 ASP.NET 开发者交流时,开发人员对 Repeater 控件知之甚少,这真让我感到惊讶。虽然它不如DataGrid功能强大,但它在许多场合中仍然提供了出色的灵活性。Repeater 控件缺少编辑和排序功能,但可以通过进一步编程而实现。

查看本文来源

 
 
 
 
 
 
 
 
 
 

Repeater使用:绑定时 结合 前台JS及后台共享方法

//前台模板
//如下
//图片结合了js
//lbl_DateStartEnd 的值 是直接绑定
//div的值 是由后绐共享的方法返回的HTML代码
<asp:Repeater ID="repeater_Show" runat="server">
            <ItemTemplate>
                <table width="100%">
                    <tr>
                        <td>
                            <a href="javascript:void hiddenlist('<%# Eval("CurrRowNum") %>')"
                            id="a<%# Eval("CurrRowNum") %>" title="隐藏">
                            <img id="img<%# Eval("CurrRowNum") %>" src="../Images/blue-chevron_up.gif"
                                border="0" align="absmiddle"  width="17" height="17"/></a> 
                            <asp:Label ID="lbl_DateStartEnd" runat="server" Text='<%# Eval("DateStartEnd") %>' ></asp:Label>
                            <asp:Label ID="lbl_YearAndWeek" runat="server" Text='<%# Eval("YearAndWeek") %>' ></asp:Label>
                        </td>                       
                    </tr>
                    <tr>
                        <td>
                            <div id='div<%# Eval("CurrRowNum") %>'>
                                <%# fn_bindWRBaseInfo(Convert.ToString(Eval("WRSeqID")))%>
                            </div>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <div>
                                <%# fn_bindWRMonthSources(Convert.ToString(Eval("tSeqID")))%>
                            </div>
                        </td>
                    </tr>
                </table>
            </ItemTemplate>
        </asp:Repeater>

// JScript 文件
function hiddenlist(which)
{
   if (document.getElementById("div"+which).style.display=="")
   {
        document.getElementById("a"+which).title="展开"
  document.getElementById("div"+which).style.display="none"  
  document.getElementById("img"+which).src="../Images/blue-chevron_down.gif"
   }
   else
   {
  document.getElementById("a"+which).title="隐藏"
  document.getElementById("div"+which).style.display=""
  document.getElementById("img"+which).src="../Images/blue-chevron_up.gif"  
   }
}

//后台按钮事件
this.repeater_Show.DataSource = ds_1.Tables[0];
this.repeater_Show.DataBind();

//后台共享方法
protected string fn_bindWRBaseInfo(string strWRSeqID)
{       
    if (strWRSeqID == "0")
    {
        return "<font color='red'>没有填写 </font> ";
    }
    else
    {
 //跑数据库 取得相关值
        //组装成HTML代码 返回到前台
        //绑定到DIV
    }
}

posted on 2007-10-20 09:02 freeliver54 阅读(335) 评论(1)  编辑 收藏 所属分类: VS技術實踐

评论

#1楼 [楼主] 2008-04-23 10:23 freeliver54      

Repeater行号:
-------------
<div id='div<%# DataBinder.Eval(Container,"ItemIndex")%>'>
<%# fn_bindWRBaseInfo(Convert.ToString(Eval("WRSeqID")))%>
</div>   回复  引用  查看    

 
 
 
 
 
 
 
 
 

原创 repeater的双重绑定收藏

新一篇: DataGrid的一些 事件会经常丢失的解决办法 | 旧一篇: repeater中嵌套repeater(vs2005)

<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>  前天,我做企业列表的时候遇到了难题,因为在企业的company表里,类别只是一个typeid,我必须要通过companytype表里的读取类别的名字.我在数据绑定的时候用的是repeater.在绑定以后还需要对类别进行二次绑定.遇到一些问题,就是在repeater里

 <asp:Repeater runat="server" OnItemDataBound="companylist_ItemDataBound" >
                              <ItemTemplate>
                            <table width="576" border="0" cellspacing="0" cellpadding="0">
                                <tr>
                                  <td background="../member/i/member_06.gif">
                                  
                                  <table width="576" border="0" cellspacing="0" cellpadding="0">
                                      <tr>
                                        <td width="441">
                                        <table width="100%" border="0" cellspacing="5" cellpadding="0">
                                                    <tr>
                                                         <td width="100"><font color="#FF0000"><strong>[<asp:Label runat="server" Text=""></asp:Label>]  </strong></font></td>
                                                         <td align="left" width="250"><a href= "CompanyDetail.aspx?CompanyID=<%#Eval("Company_ID") %>&temp_name=<%#Eval("Template_3") %>"><%#Eval("CompanyName")%></a></td>
                                                         <td> <%#Eval("CompanyCity")%></td>
                                                         <td></td>
                                                     </tr>
                                                     <tr>
                                                         <td colspan="4"><%# GetCutTitle(HtmlCoder(Convert.ToString(Eval("CompanyComment"))))%></td>
                                                      </tr>
                                                       </table>
                                        </td>
                                        <td width="135"><div align="center"></div></td>
                                      </tr>
                                    </table>
                                    </td>
                                </tr>
                              </table>
                              </ItemTemplate>
                              </asp:Repeater>

在后置代码里是这样写的

 

 protected void companylist_ItemDataBound(object sender, RepeaterItemEventArgs e)
 {

  string cnstr = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
  SqlConnection cn0 = new SqlConnection(cnstr);
  cn0.Open();
  if (!string.IsNullOrEmpty(Convert.ToString(DataBinder.Eval(e.Item.DataItem, "CompanyClass_3"))))
  {
   string mysql = "SELECT * FROM T_CompanyClass_3 WHERE CompanyClass_ID='" + DataBinder.Eval(e.Item.DataItem, "CompanyClass_3") + "'";
   SqlCommand cm0 = new SqlCommand(mysql, cn0);
   SqlDataReader dr = cm0.ExecuteReader();
   if (dr.Read())
   {
    Label myLabel = (Label)e.Item.FindControl("myLabel");
    myLabel.Text = Convert.ToString(dr["name"]);
   }
   
  }
  else
  {
   Label myLabel = (Label)e.Item.FindControl("myLabel");
   myLabel.Text = "无";
  }
  
 }

各位注意看哦.在前置代码里,我们在VS2005里一般写为 Eval(“companyclass_3”)但是在二次绑定的时候,我们用的是DataBinder.Eval(e.Item.DataItem, "CompanyClass_3")

还有就是,平时我们对lable控件付值是用lable.text=fsf;形式就可以了,但是在这里,我们采用的是

Label myLabel = (Label)e.Item.FindControl("myLabel");
    myLabel.Text = Convert.ToString(dr["name"]);

,我要去查下为什么这么写哦.有知道的告诉偶一声也可以哦


 
 
 
 

Repeater中如何传值

<asp:repeater id="Repeater2" Runat="server">
<ItemTemplate>
<table height="25px" >
<tr>
<td valign="bottom">
<asp:HyperLink text='<%#Convert.ToString(DataBinder.Eval(Container.DataItem, "title")).Length>17?Convert.ToString(DataBinder.Eval(Container.DataItem, "title")).Substring(0,17):DataBinder.Eval(Container.DataItem, "title")%>' Runat=server NavigateUrl='news_show.aspx?nid=<%#DataBinder.Eval(Container.DataItem, "id")%>' ID="Hyperlink2" >
</asp:HyperLink>
</td>
</tr>
</table>
</ItemTemplate>
</asp:repeater>

TOP

以上那样子会出错。。。

TOP

错误提示

妈的...一天能卖一颗就很不错了...

TOP

改用a hert就可以了

TOP

到底是什么错误啊?你不说怎么知道你是什么错误啊
http://www.intoclass.cn找到组织!找到党!

TOP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值