代码有点长,拜托大家耐心看完!
结构如下:
<asp:Repeater ID="Repeater_reply" runat=server>
<ItemTemplate>
<div class="word_content_bottom"><asp:TextBox id="TextBox_reply" runat=server BorderWidth=0 ReadOnly=true BackColor=#f3f3f3 Text=<%#DataBinder.Eval(Container.DataItem,"content") %>></asp:TextBox>
<asp:LinkButton ID="LinkButton_word_content_bottom_update" Text="修改" CommandName=<%#DataBinder.Eval(Container.DataItem,"id")%> OnCommand="Update_reply" runat=server></asp:LinkButton>
<asp:LinkButton ID="LinkButton_reply_sure" Text="确定" Visible=false CommandName=<%#DataBinder.Eval(Container.DataItem,"id")%> OnCommand="Sure_reply" runat=server></asp:LinkButton>
<asp:LinkButton ID="LinkButton_reply_cancel" Text="取消" Visible=false CommandName=<%#DataBinder.Eval(Container.DataItem,"id")%> OnCommand="Cancel_reply" runat=server></asp:LinkButton>
<asp:LinkButton ID="Confirmbutton_word_content_bottom" Text="删除" CommandName=<%#DataBinder.Eval(Container.DataItem,"id")%> OnCommand="Delete_reply" runat="server"></asp:LinkButton>
</div>
</ItemTemplate>
</asp:Repeater>代码如下:
protected void Update_reply(object sender, System.Web.UI.WebControls.CommandEventArgs e)
{
//这里放更新事件,主要改变空间的visiable属性,让LinkButton_reply_sure显示出来
}
protected void Sure_reply(object sender, System.Web.UI.WebControls.CommandEventArgs e)
{
//这个是确定事件,在这里获取TextBox_reply的值,并且更新到数据库中
}问题如下:
获取不到修改后的TextBox_reply的值,而只是修改之前的值
这改如何处理呢?
结构如下:
<asp:Repeater ID="Repeater_reply" runat=server>
<ItemTemplate>
<div class="word_content_bottom"><asp:TextBox id="TextBox_reply" runat=server BorderWidth=0 ReadOnly=true BackColor=#f3f3f3 Text=<%#DataBinder.Eval(Container.DataItem,"content") %>></asp:TextBox>
<asp:LinkButton ID="LinkButton_word_content_bottom_update" Text="修改" CommandName=<%#DataBinder.Eval(Container.DataItem,"id")%> OnCommand="Update_reply" runat=server></asp:LinkButton>
<asp:LinkButton ID="LinkButton_reply_sure" Text="确定" Visible=false CommandName=<%#DataBinder.Eval(Container.DataItem,"id")%> OnCommand="Sure_reply" runat=server></asp:LinkButton>
<asp:LinkButton ID="LinkButton_reply_cancel" Text="取消" Visible=false CommandName=<%#DataBinder.Eval(Container.DataItem,"id")%> OnCommand="Cancel_reply" runat=server></asp:LinkButton>
<asp:LinkButton ID="Confirmbutton_word_content_bottom" Text="删除" CommandName=<%#DataBinder.Eval(Container.DataItem,"id")%> OnCommand="Delete_reply" runat="server"></asp:LinkButton>
</div>
</ItemTemplate>
</asp:Repeater>代码如下:
protected void Update_reply(object sender, System.Web.UI.WebControls.CommandEventArgs e)
{
//这里放更新事件,主要改变空间的visiable属性,让LinkButton_reply_sure显示出来
}
protected void Sure_reply(object sender, System.Web.UI.WebControls.CommandEventArgs e)
{
//这个是确定事件,在这里获取TextBox_reply的值,并且更新到数据库中
}问题如下:
获取不到修改后的TextBox_reply的值,而只是修改之前的值
这改如何处理呢?
个人认为repeater比datalist效率要高得多textbox的属性默认好像就是enableviewstate = ture的吧,我试下了,呵呵
现在利用command事件获取不到,也真是让我郁闷的要命
if(!Page.Ispostback)
{
bind();
}
所以应该不存在那个问题吧
好像pageindexchanged、itemdatabind要比command事件先执行?
{
}
这里面没有写句柄,因为控件在repeater的模版列中,所有都是根据id获取的
pageindexchanged不是必须的
哎呀,有没有其他的办法呢,我不想用datalist做好的编辑功能啊
如果从侧面解决 你只要加入 if(e.CommandName=="Sure_reply") return;等缺德方法了! 直接_ItemCommand 里面执行你的流程不好吗?
帮帮我哦
如果是这样的情况到我的博客看一下
http://blog.csdn.net/shixin1198/archive/2006/10/08/1325560.aspx
我以前说的有点错误,就是pageindexchanged事件是必须的
现在我发现pageindexchanged、itemdatabind事件比command事件先执行,这样的话,虽然每次都修改了textbox的text,但是点击"确定"按钮的时候,先执行itemdatabind事件,这样又改回了原来的样子,所以每次都修改不成功。
现在的话,只要让commnand在itemdatabind之前执行就可以了,或者第一次进页面的时候执行itemdatabind,然后把数据缓存起来,以后不执行itemdatabind事件,这样就可以了,但是我不知道如何做,高手请帮忙
if(!this.IsPostBack)
{
Command(sender,e);
}
if(this.IsPostBack)
{
Command(sender,e);
}
{
}
楼主做人不厚道
LZ遇到问题自己先单步跟踪一下就知道.
因为我的程序是repeater里面套了一个repeater,下面第一个repeater称为r1,第二个称为r2
我想在在r1的itemdatabind事件中获取r2中的textbox,如何做呢?
用Request获取表单值可以解决问题
我分析的原因是页面加入了片断缓存
<asp:Label ID="Label_xiangxi" runat=server></asp:Label>
</div>
</div>
</div>
</div>
<div class="leaveword">
<div class="word">
<div class="word_biao"></div>
<div class="word_content">
<cc1:pager_repeater id="Pager_repeater_leaveword" runat="server" PageSize="5" OnPageIndexChanged="Pager_repeater_leaveword_PageIndexChanged" OnItemDataBound="Pager_repeater_leaveword_ItemDataBound">
<ItemTemplate>
<div class="word_content_top">
<span class="liuyanren">
<font color=#0073bd>留言人:</font><%#DataBinder.Eval(Container.DataItem,"leaver") %>
</span>
<span class="liuyanshijian">
<font color=#0073bd>留言时间:</font><%#DataBinder.Eval(Container.DataItem,"time_add") %>
</span>
</div>
<div class="word_content_middle">
<font color=#0073bd>留言内容:</font><%#DataBinder.Eval(Container.DataItem,"content") %>
<asp:Label ID="Label_id_word" Text=<%#DataBinder.Eval(Container.DataItem,"id") %> runat=server Visible=false></asp:Label>
</div>
<div id="word_content_change" class="word_content_change" runat=server visible=false>
<span class="word_content_reply">[</span>
<span class="word_content_reply" id="word_content_reply">
<asp:LinkButton ID="LinkButton_word_content_reply" Text="回复" OnCommand="Word_reply" CommandName=<%#DataBinder.Eval(Container.DataItem,"id")%> runat=server></asp:LinkButton>
</span>
<span class="word_content_reply">|</span>
<span class="word_content_reply" id="word_content_delete">
<cc1:confirmbutton ID="Confirmbutton_word_content" Text="删除" CommandName=<%#DataBinder.Eval(Container.DataItem,"id")%> OnCommand="Delete_word" runat="server"></cc1:confirmbutton>
</span>
<span class="word_content_reply">]</span>
</div>
<div class="word_content_reply">
<asp:Repeater ID="Repeater_reply" runat=server>
<ItemTemplate>
<div class="word_content_bottom">
<font color=#0073bd>回复:</font><asp:TextBox id="TextBox_reply" runat=server BorderWidth=0 EnableViewState=true Width=560 ReadOnly=true BackColor=#f3f3f3 Text=<%#DataBinder.Eval(Container.DataItem,"content") %>></asp:TextBox>
(<b>回复人</b>:<font color=#aaaaaa><%#DataBinder.Eval(Container.DataItem, "replyer")%></font>)
</div>
<div class="word_content_bottom_change" runat=server>
<span class="word_content_reply">[</span>
<span class="word_content_reply" id="word_content_bottom_update">
<asp:LinkButton ID="LinkButton_word_content_bottom_update" Text="修改" CommandName=<%#DataBinder.Eval(Container.DataItem,"id")%> OnCommand="Update_reply" runat=server></asp:LinkButton>
</span>
<span class="word_content_reply" id="span_jiange1" runat=server>|</span>
<span class="word_content_reply" id="Span_reply_sure">
<asp:LinkButton ID="LinkButton_reply_sure" Text="确定" Visible=false CommandName=<%#DataBinder.Eval(Container.DataItem,"id")%> OnCommand="Sure_reply" runat=server></asp:LinkButton>
</span>
<span class="word_content_reply" id="span_jiange2" visible="false" runat=server>|</span>
<span class="word_content_reply" id="Span_reply_cancel">
<asp:LinkButton ID="LinkButton_reply_cancel" Text="取消" Visible=false CommandName=<%#DataBinder.Eval(Container.DataItem,"id")%> OnCommand="Cancel_reply" runat=server></asp:LinkButton>
</span>
<span class="word_content_reply" id="sapn_jiange3" visible=false runat=server>|</span>
<span class="word_content_reply" id="word_content_botton_delete">
<cc1:confirmbutton ID="Confirmbutton_word_content_bottom" Text="删除" CommandName=<%#DataBinder.Eval(Container.DataItem,"id")%> OnCommand="Delete_reply" runat="server"></cc1:confirmbutton>
</span>
<span class="word_content_reply">]</span>
</div>
</ItemTemplate>
</asp:Repeater>
</div>
<div class="jiange"></div>
</ItemTemplate>
</cc1:pager_repeater>
</div>
</div>
<div class="leave">
<div class="leave_left">我要留言:</div>
<div class="leave_right">
<asp:TextBox ID="TextBox_leave" Runat="server" TextMode="MultiLine" BorderWidth="1px" BorderColor="#A5CEFF"></asp:TextBox>
<asp:Button ID="Button_sure" Runat="server" Text="确定" OnClick="Button_sure_Click"></asp:Button>
<asp:Button ID="Button_cancel" Runat="server" Text="取消" OnClick="Button_cancel_Click"></asp:Button><br>
</div>
</div>
</div>
</div>
<uc_bottom:bottom id="Top2" runat="server"></uc_bottom:bottom></form>
</body>
</HTML>
protected void Page_Load(object sender, System.EventArgs e)
{
if (!Page.IsPostBack)
{
if (Request.QueryString["id"] == null && Request.QueryString["page"] == null)
{
Response.Redirect("error.aspx");
return;
}
this._ID = Convert.ToInt32(Request.QueryString["id"]);
this.Bind_food_message();
}
if (Request.Cookies["user"] == null)
this.Leaver = "游客";
else
this.Leaver = Request.Cookies["user"].Values["username"];
}
#region 留言确定事件
protected void Button_sure_Click(object sender, EventArgs e)
{
int count = 0;
string content = string_deal.InputText(this.TextBox_leave.Text, 1000); food x = new food(this._ID); count = food_leaveword.Insert(this._ID, x.Name, x.Shop_id, this.Leaver, content);
if (count > 0)
{
Response.Redirect("food_detail.aspx?id=" + this._ID + "");
this.TextBox_leave.Text = "";
}
else
{
Response.Write("<script>alert('抱歉,发表失败!');location.href='food_detail.aspx?id=" + this._ID + "'</script>");
}
}
#endregion #region 留言取消事件
protected void Button_cancel_Click(object sender, EventArgs e)
{
this.TextBox_leave.Text = "";
}
#endregion #region pager_repeater 的pageindexchanged事件
protected void Pager_repeater_leaveword_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
{
System.Data.DataView dv = food_leaveword.Food_leaved_id(this._ID);
this.Pager_repeater_leaveword.CurrentPageIndex = e.NewPageIndex;
this.Pager_repeater_leaveword.DataSource = dv;
this.Pager_repeater_leaveword.DataBind();
}
#endregion #region pager_repeater的itemdatabind事件
protected void Pager_repeater_leaveword_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
Label Label_id_word = (Label)e.Item.FindControl("Label_id_word");
Repeater Repeater_reply = (Repeater)e.Item.FindControl("Repeater_reply"); if (Label_id_word != null)
{
int id = Convert.ToInt32(Label_id_word.Text);
Repeater_reply.DataSource = food_word_reply.Food_reply_id_leave(id);
Repeater_reply.DataBind();
}
if (Request.Cookies["user"] != null && Request.Cookies["user"].Values["flag"] == "0")
{
System.Web.UI.HtmlControls.HtmlGenericControl Div_word_content_change = (HtmlGenericControl)e.Item.FindControl("word_content_change");
if (Div_word_content_change != null)
{
Div_word_content_change.Visible = true;
}
}
}
#endregion
#region 留言回复里面的更新事件
protected void Update_reply(object sender, System.Web.UI.WebControls.CommandEventArgs e)
{
LinkButton LinkButton_reply = (LinkButton)sender;
if (LinkButton_reply != null)
{
TextBox_reply = (TextBox)LinkButton_reply.Parent.FindControl("TextBox_reply");
this.Content = string_deal.InputText(TextBox_reply.Text, 1000);
this.TextBox_reply.BorderWidth = 1;
this.TextBox_reply.Width = 560;
this.TextBox_reply.BorderStyle = BorderStyle.Dotted;
this.TextBox_reply.TextMode = TextBoxMode.MultiLine;
this.TextBox_reply.ReadOnly = false; LinkButton_reply.Visible = false;
System.Web.UI.WebControls.LinkButton LinkButton_reply_sure = (LinkButton)LinkButton_reply.Parent.FindControl("LinkButton_reply_sure");
if (LinkButton_reply_sure != null)
LinkButton_reply_sure.Visible = true;
HtmlGenericControl span_jiange1 = (HtmlGenericControl)LinkButton_reply.Parent.FindControl("span_jiange1");
if (span_jiange1 != null)
span_jiange1.Visible = false;
HtmlGenericControl span_jiange2 = (HtmlGenericControl)LinkButton_reply.Parent.FindControl("span_jiange2");
if (span_jiange2 != null)
span_jiange2.Visible = true;
HtmlGenericControl sapn_jiange3 = (HtmlGenericControl)LinkButton_reply.Parent.FindControl("sapn_jiange3");
if (sapn_jiange3 != null)
sapn_jiange3.Visible = true;
LinkButton LinkButton_reply_cancel = (LinkButton)LinkButton_reply.Parent.FindControl("LinkButton_reply_cancel");
if (LinkButton_reply_cancel != null)
LinkButton_reply_cancel.Visible = true;
}
}
#endregion #region 留言回复里面的确定事件
protected void Sure_reply(object sender, System.Web.UI.WebControls.CommandEventArgs e)
{
int id = Convert.ToInt32(e.CommandName);
LinkButton LinkButton_reply = (LinkButton)sender;
if (LinkButton_reply != null)
{
int _count = 0;
food_word_reply z = new food_word_reply(id); _count = z.Update(this.Content, this.Leaver);
if (_count > 0)
{
Response.Write("<script>alert('修改成功');location.href='food_detail.aspx?id=" + this._ID + "'</script>");
}
else
{
Response.Write("<script>alert('抱歉,修改失败!');location.href='food_detail.aspx?id=" + this._ID + "'</script>");
}
}
}
#endregion
但是,我在后台添加readonly的时候,不管是把readonly设为true还是false,我在单步调试的时候都是false。还有我是在Update_reply()这个事件里面获取textbox并且给它添加readonly属性的
如果你仔细看看我发的所有的代码就会发现,textbox是放在模版列中的重复列表控件,要在page_load中后去次textbox也不是一件容易的事情啊,至少我认为是比较困难!!
!IsPostBack判断一下是否是回调啊?否则每次都会初始化初值(从数据中读取)这时才会执行你button中的代码,更新的肯定也是原来的数据(也就是你所说的没有修改以前的)