得Repeater控件里动态声称的控件的价

常上CSDN社区论坛的对象应该了解在CSDN里面结贴的当儿会叫您叫各个回帖的人口一定的分值作为报酬。此时咱们无能够固定TextBox框的个数,因为回帖的口是免定点的。而且只要拿TextBox控件和纯粹的回帖人关系则会招致后台代码冗余,也不便利保护及扩充为,显得不灵敏不显。

QQ空间的留言本里面为是相近的事态。当有人给我们留言的时候我们而恢复是留言就点击“回复”就会现出一个TextBox框出来,然后我们填好温馨之留言点击“提交”系统便自动提交了我们的留言。一般对这种又的多寡读取我们常常是为此Repeater控件来做,而且也能够比灵活得分页,更珍贵之是她能成功动态变化控件。

下我们尽管来兑现类似QQ留言与恢复留言的效能。

<asp:Repeater ID=”Rep”
runat=”server”>

               
<ItemTemplate>

                    <table
border=”1″ width=”100%” cellpadding=”0″
cellspacing=”0″>

                       
<tr>

                            <td id=”Right_img”
width=”25%” align=”center” valign=”top” rowspan=”3″>

                                <br
/>

                               
<%# “<img src=” + “../image/head/” +
DataBinder.Eval(Container.DataItem,”HeadImage”) + “.gif” + “>”
%>

                                <br
/>

                                <br
/>

                                <br
/>

                               
<%# DataBinder.Eval(Container.DataItem, “Name”)
%>

                                <br
/>

                                <%#
DataBinder.Eval(Container.DataItem, “GuessDate”) %>

                           
</td>

                            <td
id=”Right_Top” height=”22″ align=”center”>

                               
留言标题:<%#
DataBinder.Eval(Container.DataItem, “Title”) %>

                           
</td>

                       
</tr>

                       
<tr>

                            <td
valign=”top” align=”left”
style=”padding-top:15px;padding-bottom:25px;padding-left:2px;”>

                                <br />

                               
<%# DataBinder.Eval(Container.DataItem, “Content”) %> 

                                <br
/> 

                                <br
/>                         

                               
<%# DataBinder.Eval(Container.DataItem, “Reply”) %>   

                               
<%# DataBinder.Eval(Container.DataItem, “RDate”)
%>

                                <br
/>

                                <div id='<%#”Reply” +
DataBinder.Eval(Container.DataItem, “ID”) %>’
style=”display:none;”>

                                   
<p>—————————-</p>

                                   
<asp:TextBox ID=”RepInput” runat=”server” TextMode=”MultiLine”
Width=”300″ Height=”70″></asp:TextBox>

                                    <br
/>

                                   
<asp:LinkButton ID=”RepButton1″ runat=”server”
CommandArgument= ‘<%# Eval(“id”)+”,”+(Container as
RepeaterItem).ItemIndex%>’ 
OnCommand=”RepButton_Click”
CommandName=”save”>提交</asp:LinkButton>

                                   
<a href=”javascript:;”
onclick=’HideReply(“<%#”Reply”+DataBinder.Eval(Container.DataItem,”ID”)
%>”)’ >取消</a>

                               
</div>      
                             

                           
</td>

                       
</tr>

                        <tr
id=”Right_Bottom” valign=”middle”>

                            <td
height=”22″ valign=”middle”>

                               
<div id=”UserInfo”>

                                   
<img class=”im” src=”../image/email.gif” alt=”Email”
height=”15″ width=”15″ /><%#”<a href=mailto:”+
DataBinder.Eval(Container.DataItem, “Email”) +”>电子邮箱</a>
“%>

                                   
<img class=”im” src=”../image/home.gif” alt=”Email”
height=”15″ width=”15″ /><%#”<a href=http://"+
DataBinder.Eval(Container.DataItem, “HomePage”)+”
>个人主页</a>”%>

                                   
<img class=”im” src=”../image/oicq.gif” alt=”Email”
height=”15″ width=”15″ /><%#”<a href= “+
DataBinder.Eval(Container.DataItem, “QQ”)+” >QQ</a>
“%>

                                   
<span id=”Master”>

                                     
 <a href=”javascript:;”
onclick=’ShowReply(“<%#”Reply”+DataBinder.Eval(Container.DataItem,”ID”)
%>”)’>回复留言</a>                                 

                                      
<asp:LinkButton ID=”LinkButton2″ runat=”server”
OnClientClick=”return confirm(‘确定要去除这漫长留言么?’);”
OnCommand=”Del_Click” CommandArgument= ‘<%#
DataBinder.Eval(Container.DataItem,”ID”) %>’>删除留言</asp:LinkButton>

                                   
</span>

                               
</div>

                           
</td>

                       
</tr>

                   
</table>

               
</ItemTemplate>

           
</asp:Repeater>

 

咱俩聊不去追究就段代码,只待去留意一下红色部分即使吓。

新民主主义革命部分是一个藏匿的Div层,里面是一个TextBox控件和一个用来提交回复留言的LinkButton控件。

当然之层是逃匿的,正常状态下是看不到的。当我们点击下面的超链接“回复留言”的时段是层即显示出(相关的js代码忽略)。然后我们在此层里的TextBox框输入我们的留言,随即点击“提交”控件提交内容。这个上就发一个问题了:我们是怎么抱Repeater控件里面的控件值的(注意:这个控件是“活的”,是当运作的下因客户来输入的,而休是咱定死的内容,如Label控件!)并将以此价写上数据库被相关的表中并且用于区分是对准是留言者的死灰复燃?

只要缓解以上问题就是务须了解Repeater控件的运行机制原理。既然是双重得读取记录,那么肯定有用于区分记录之“项值”,因此(Container as
RepeaterItem).ItemIndex这个就是故诞生。对于第一长记下它的一味也0,第二漫长它的价也1,以此类推…因此我们就得据此她同咱们数据库表中的主键一起传递至后台代码中。

CommandArgument= ‘<%#
Eval(“id”)+”,”+(Container as
RepeaterItem).ItemIndex%>’的意很扎眼,id
就是后台数据库被留言记录唯一的主键值,中间相隔一个逗号之后还连接一个项值。这样于后台我们虽可知轻松收获及时简单单至关重要的价值了。

后人相关事件代码如下:

public
void RepButton_Click(object sender, CommandEventArgs e)

        {          

            RepText =
this.Rep.Items[Convert.ToInt32(e.CommandArgument.ToString().Split(‘,’)[1])].FindControl(“RepInput”)
as TextBox;

               
System.Data.OleDb.OleDbConnection con =
MengXin.MyCode.DB.CreateConnect();

               
System.Data.OleDb.OleDbDataAdapter Ada = new
System.Data.OleDb.OleDbDataAdapter(“Select *
from GuestBook where state = yes and ID = ” +
e.CommandArgument.ToString().Split(‘,’)[0], con);

               
System.Data.OleDb.OleDbCommandBuilder Bui = new
System.Data.OleDb.OleDbCommandBuilder(Ada);

                DataSet ds = new
DataSet();

                Ada.Fill(ds,
“RepGuestBook”);

                if
(ds.Tables[“RepGuestBook”].Rows.Count > 0)

                {

                   
ds.Tables[“RepGuestBook”].Rows[0][“Reply”] =
“———————-<br />管理员回复:<br
/><br /><p style=’color:#fcb202′>” + RepText.Text +
“</p><br />于”;

                   
ds.Tables[“RepGuestBook”].Rows[0][“RDate”] =
System.DateTime.Now.ToString();

                    Ada.Update(ds,
“RepGuestBook”);

                }

                else

                {                 

                   
Response.Write(“<script
language=javascript>alert(‘无记录!’);window.location=’Default.aspx’;</script>”);

 

                }

               
con.Close();

               
Response.Write(“<script
language=javascript>window.location=’Default.aspx’;</script>”);

 

           

        }

 

在意事件中革命的部分,RepText是一个TextBox控件,主要是接客户点击的宗中之回升留言的情节。

切切实实的尚用多多练习实践。如果结合Ajax,实现转片刷新就完美兑现了QQ留言板的力量了…

 

PS:以上代码在XP+IIS5.1+VS2008+IE8+ACCESS测试通过…

相关文章