Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 网站建设 > ASP > (原创)进一步讨论操作Repeater内部的控件
【标  题】:(原创)进一步讨论操作Repeater内部的控件
【关键字】:Repeater
【来  源】:http://blog.csdn.net/levenc/archive/2006/09/14/1220023.aspx

(原创)进一步讨论操作Repeater内部的控件

Your Ad Here 前一阵子遇到了这个问题,查了一些资料,写了关于操作Repeater控件Template内控件一文,(查看请进http://blog.leven.com.cn/article.asp?id=70
然后网友baohua又进一步提出了问题,原文如下:
引用内容 引用内容
如果是根据 用户的Session  和 Repeater 里面某一现Item的 UserId  是否匹配
来动态显示 修改 删除呢?  

(UserId  也是 来源于数据库的 ,要绑定完了才能判断出 Session 的 UserId 和 里面的 UserId 是否 一样)

原文见:http://blog.leven.com.cn/default.asp?id=70#comm_7

针对这个问题,我对文章提及的问题进行进一步的探讨,发现这个问题也是好解决的,现写出来大家讨论讨论,好了,不说废话,进入主题吧。
就aohua提及的问题,仍然可以使用该事件解决,但是由于要判断User和Session中的信息是否一样,所以方式有了一些不同。
我们就用下面的实例解决问题,新建一个数据库,添加一个Data表,表定义如下图:

然后新建一个User表,定义如下图:

在我们绑定数据时候,就需要判断Data表中的PostUser字段和登陆用户表中相应UserName用户是否又IsDel的权限。我们要做到的过程应该是:
1。读取User表中的用户名和IsDel字段存入Session。
2。读取Data表中的字段放入DataTable
3。将DataTale数据绑定到Repeater控件上面
4。加入Repeater控件的ItemDataBound事件处理函数,编写相应代码
第一个好说了,只需要读取数据,程序如下:
protected void ReadUser()
        {
            SqlCommand cmd 
= new SqlCommand();
            
string SQL = @"Select * FROM [User] Where id=1";
            cmd.Connection 
= conn;
            cmd.CommandText 
= SQL;
            SqlDataReader dr 
= cmd.ExecuteReader();
            
if (dr.Read())
            {
                Session.Add(
"UserName", dr["UserName"]);
                Session.Add(
"IsDel",dr["IsDel"]);
            }
            dr.Close();
        }

这样就完成了第一个部分。
第二第三也好说,常见的代码就可以搞定;如下
                SqlCommand cmd = new SqlCommand();
                SqlDataAdapter da;
                DataTable dt
=new DataTable();
                
string SQL = @"Select * FROM [Data] orDER BY id DESC";
                cmd.Connection 
= conn;
                cmd.CommandText
=SQL;
                da 
= new SqlDataAdapter(cmd);
                da.Fill(dt);
                da.Dispose();
                cmd.Dispose();
                
//this.Dispose();
                DataRepeater.DataSource = dt;
                DataRepeater.DataBind();
                
关键就是第四个部分了,怎么判断呢?这儿有几个关键的,首先要弄明白Repeater_ItemDataBound什么时候会被调用,怎么调用的,通过测试发现,Repeater_ItemDataBound发生在还没有显示之前,而且每生成一个项目就会被系统调用一次,即生成<HeaderTemplate>一次,每个<ItemTemplate>一次,然后<FootTemplate>还调用,知道了这个,代码就好办了。
相应代码如下:
protected void Repeater_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
        
{
            
//Response.Write("该函数被调用。");  //这儿去掉注释可以测试代码执行的次数
            RepeaterItem item = e.Item;
            DataTable dt 
= (DataTable)DataRepeater.DataSource;
            
string _UserName;
            
bool _IsDel;
            
try
            
{
                _UserName
=Session["UserName"].ToString();
                _IsDel 
= Convert.ToBoolean(Session["IsDel"]);
            }

            
catch
            
{
                _UserName
=string.Empty;
                _IsDel
=false;
            }

            
if ((item.ItemType == ListItemType.Item) || (item.ItemType == ListItemType.AlternatingItem))
            
{
                
if (_UserName==dt.Rows[item.ItemIndex]["PostUser"].ToString()) //item.ItemIndex得到Item的序列
                {
                    
if (_IsDel==true)
                    
{
                        ((HyperLink)item.FindControl(
"Delete")).NavigateUrl = string.Format("del.aspx?id={0}", dt.Rows[item.ItemIndex]["id"]);
                    }

                }

            }

        }


相应的aspx文件的内容如下:

<asp:Repeater ID="DataRepeater" runat="server" OnItemDataBound="Repeater_ItemDataBound">
    
<HeaderTemplate>
    
<table width="80%" align="center">
    
<tr>
       
<td width="15%">ID</td>
       
<td width="35%">Title</td>
       
<td width="40%">Content</td>
       
<td width="10%">Operation</td>
    
</tr>
    
</HeaderTemplate>
    
<ItemTemplate>
    
<tr>
       
<td><%#Eval("id"%></td>
       
<td><%#Eval("Title"%></td>
       
<td><%#Eval("Content"%></td>
       
<td><asp:HyperLink ID="Delete" runat="server">Delete</asp:HyperLink></td>
    
</tr>
    
</ItemTemplate>
    
<FooterTemplate>
    
</table>
    
</FooterTemplate>
    
</asp:Repeater>

运行,可以看到如下界面:

可以看到,id为1和2的Delete链接被激活了,id为3的没有激活,当然,这只是测试,具体想要怎么做就看自己喜好和程序需求了。
示例程序完整源代码(VS2005+SQL2005EE测试通过):
下载文件 点击下载此文件
 
Iframe标记的使用格式是::【上一篇】
解决multipart/form-data表单中传递参数问题:【下一篇】
【相关文章】
  • (原创)关于操作Repeater控件Template内控件
  • 母版页里面查找Repeater内控件,并构造URL
  • 利用Repeater控件来分页显示
  • 自定义Web控件(简单的Repeater数据绑定)
  • 利用 PagedDataSource 实现 Repeater 分页
  • Nesting Repeaters with Hierarchical Data and Server-Binding
  • 用DataList + Repeater实现二级下拉列表 当前被点击的字体加粗.
  • Understanding the Differences Among the DataGrid, DataList, and Repeater
  • 使用PagedDataSource类实现DataList和Repeater控件的分页显示[转]
  • ASP.NET 嵌套Repeater[转收藏]
  • 【随机文章】
  • Linux下Ping的实现代码
  • 文件改名小程序
  • 解决“System.Data.Odbc.OdbcException: ERROR [IM001] [Microsoft][ODBC 驱动程序管理器] 驱动程序不支持此...
  • 团队中5个普遍且危险的沼泽
  • 求100内的素数
  • 用简单而强大的Excel函数创建一个时间表
  • 保护SQL Server:为安全性而安装
  • 快照复制
  • 控制bean定制器的技巧(3)
  • 操作系统常见问题:操作系统启动变慢的几个原因
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.