我在Repeater模板里面放了一个button  一开始button 的值是“处理中”,然后点击button后  button 的值改为“处理完成”但我 点击一行时,这一列跟着我点击的变化了! 不知道怎么弄的!望高手指点。前台代码:<asp:Repeater ID="Repeater1" OnItemDataBound="Repeater1_OnItemDataBound" 
            runat="server" onitemcommand="Repeater1_ItemCommand">
            <ItemTemplate>
                <tr>
                    <td class="ttb24" style="text-align: center;">
                        <asp:Button ID="Button2" runat="server" Text="处理中" OnClick="state_blick"/>
                    </td>
                </tr>
            </ItemTemplate>
        </asp:Repeater>后台代码:
   button事件:     protected void state_blick(object sender, EventArgs e)
                    {
                       buttonBind();
                    }
      
       private void buttonBind()
        {
            foreach (RepeaterItem item in Repeater1.Items)
            {
                Button but = (Button)item.FindControl("Button2");
                if (but.Text == "处理中")
                {
                    but.Text = "处理完成";
                }
                else
                {
                   but.Text = "处理中";
                }
            }
        }

解决方案 »

  1.   

    但我 点击一行时,这一列跟着我点击的变化了!  什么意思?是整列全变了还是button.text变了
      

  2.   

    change事件   你的事件用错了
      

  3.   

    我是button控件,点击的时候!才能改变 Repeater模板里面button的值。
      

  4.   

    二楼:  你在Repeater模板里面放一个button,  那么这一列都是button吧! 我的意思是!点击一行的button时所有的button的值都变了! 我现在就想实现一行一行的变button的值,
      

  5.   

    你不要用FindControl(“button2”),你生成页面后查看这个Button在前台生成的ID,然后Find这个ID就行了
      

  6.   

    可以在每个button中绑定一定commandargument,绑定一个id,然后执行command方法就好了
      

  7.   

    帮你写了个类似你的,不过button是启用,禁用,上代码:后台protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            if (e.CommandName == "stateON")
            {
                int myid = Convert.ToInt32(e.CommandArgument);
                DataSet3TableAdapters.MyThirdTableAdapter adapter = new DataSet3TableAdapters.MyThirdTableAdapter();
                adapter.qiyong("启用", myid);
                Repeater1.DataBind();
            }
            else if(e.CommandName=="stateOFF")
            {
                int myid = Convert.ToInt32(e.CommandArgument);
                DataSet3TableAdapters.MyThirdTableAdapter adapter2 = new DataSet3TableAdapters.MyThirdTableAdapter();
                adapter2.qiyong("禁用", myid);
                Repeater1.DataBind();
            }
        }
        protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)//对于Header,Footer等不进行处理
            {
                DataRowView myview = (DataRowView)e.Item.DataItem;
                var mystate = (DataSet3.MyThirdRow)myview.Row;
                if (mystate.State.Trim() == "禁用")
                {
                //    HtmlGenericControl myspan = (HtmlGenericControl)e.Item.FindControl("yang");
                //    myspan.Attributes["class"] = "warning";
                    HtmlTableRow yang=(HtmlTableRow)e.Item.FindControl("y");
                    yang.Attributes["class"]="warning";
                    //myspan.Style["background-color"]="red";
                    Button en = (Button)e.Item.FindControl("state1");
                    Button dien = (Button)e.Item.FindControl("state2");
                    en.Visible = true;
                    dien.Visible = false;
                }
                else if(mystate.State.Trim()=="启用")
                {
                    //HtmlGenericControl myspan = (HtmlGenericControl)e.Item.FindControl("yang");
                    //myspan.Attributes["class"] = "nowarning";
                    HtmlTableRow yang = (HtmlTableRow)e.Item.FindControl("y");
                    yang.Attributes["class"] = "nowarning";
                    Button en = (Button)e.Item.FindControl("state1");
                    Button dien = (Button)e.Item.FindControl("state2");
                    en.Visible = false;
                    dien.Visible = true;
                }
            }
            else
            {
                return;
            }
        }前台:<ItemTemplate><tr id="y" runat="server"><td><%#Eval("ID") %></td><td><%#Eval("Name") %></td><td><%#Eval("State") %></td><td><asp:Button runat="server" Text="启用" CommandName="stateON" CommandArgument='<%#Eval("ID") %>' ID="state1"/></td><td><asp:Button runat="server" Text="禁用" CommandName="stateOFF" CommandArgument='<%#Eval("ID") %>' ID="state2"  OnClientClick="return confirm('真的要禁用吗?');"/></td></tr></ItemTemplate>
      

  8.   

    你的
    protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
            {
                if (e.CommandName == "state1")
                {
                    Button bt = (Button)e.Item.FindControl("Button1");
                    bt.Text = "处理完成";
                }
            }<ItemTemplate><table><tr><td><%#Eval("Name")%></td><td><%#Eval("Age")%></td><td> <asp:Button ID="Button1" runat="server" Text="处理中" OnClientClick="confirm('确定更改?');" CommandName="state1"  /></td></tr></table>
      

  9.   

    list_ItemCommand 事件中,通过CommandName判断执行代码给你的button加上CommandName
      

  10.   

    8楼的方法:很好   但是修改后,刷新页面又回到了原来的值! 设置ispostback也没有用了。
      

  11.   

    Repeater  控件只能在ItemCommand事件中写吧。
      

  12.   

    button事件: protected void state_blick(object sender, EventArgs e)
    {
    ((Button) sender).Text = "处理中" ? "处理完成" : "处理中";
    }
      

  13.   

    页面刷新了!
    所以你的数据重新又绑定了一次!
    如果要实现最好是用AJAX!
      

  14.   

    刷新恢复的话那就要麻烦LZ动用下数据库,记录下状态了多添加个字段吧,反正你的Repeater 控件肯定绑定在强类型Dataset上吧
      

  15.   

    我也是想的 记录到数据库中! 但还是要把这问题给解决了! 不然下次遇到又只能想其他的方法了! 16楼的方法不知道行不行哦!  试试。ajax我不怎么会,没有用过!