<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Eval("sd_id")%>' Visible="False"></asp:TextBox>
<asp:Button ID="Button1" onclick="Button1_Click" runat="server" Text="点这里" /></div>
</ItemTemplate>
</asp:Repeater>//这是前端的代码
//下面是cs里面的代码 foreach (RepeaterItem item in RepeaterItem.Items)
{
Button Button1 = item.FindControl("Button1") as Button; if (Button1 != null)
{
Button1.Enabled = false;
((Button)sender).Text = "OK,已经点过了";
}
}
我的意思就是在关面列出来的数据后面都有一个按钮,点一下之后刷新页面已经点过的就变成灰色不能点了,请问该怎么做啊,
多谢高手指教!!
那么sd_id的值为2的按钮就为灰的,,谢谢了补充了问题加了20分,请高手笑纳!
protected void Button1_Click(object sender,EventArgs e)
{
((Button)sender).Enabled = false;
((Button)sender).Text = "OK,已经点过了"; }
Button btn=sender as Button;
btn.Enabled = false;
RepeaterItem item =btn.NamingContainer as RepeaterItem;
protected void Button1_Click(object sender,EventArgs e)
{
((Button)sender).Enabled = false;
((Button)sender).Text = "OK,已经点过了"; int index = ((RepeaterItem)((Button)sender).NamingContainer).ItemIndex;
TextBox t1 = (TextBox)Repeater1.Items[index].FindControl("TextBox1");
t1.Text = "2";
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
....数据库操作.. if (si_id== 2)
{
((Button)sender).Enabled = false;
((Button)sender).Text = "已经点过了";
}
}
}
但是这样做一直显示((Button)sender).Enabled = false;这一句"用户代码未处理"{"无法将类型为“ASP.manager_ydpayback_aspx”的对象强制转换为类型“System.Web.UI.WebControls.Button”。"}..
这时数据还没绑定呢!!所以是不行的!
还有你si_id是数据库字段绑定了TextBox1,如果它的值在数据表中是2的话,
在Repeater的ItemDataBound中进行,如:
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
TextBox t1 = (TextBox)e.Item.FindControl("TextBox1");
if (t1.Text == "2")
{
Button b1 = (Button)e.Item.FindControl("Button1");
b1.Enabled = false;
b1.Text = "OK,已经点过了";
}
}
}
<asp:Button ID="btedit" runat="server" CommandName='btedit' CommandArgument=' <%# Eval("ID")%>' ForeColor="Red" Font-Underline="true">
ItemCommand事件里.判断,e.CommandName是否等于你按钮的CommandName
假如等于
Button bt = (Button)e.Item.FindControl("btedit");
设置它的属性为enable
\重新绑定
{
if (!IsPostBack)
{
....数据库操作.. if (si_id== 2)
{
((Button)sender).Enabled = false;
((Button)sender).Text = "已经点过了";
}
}
}
sender是不能转为Button的,9楼的方法应该是对的,可以试一下。
<asp:Button ID="Button1" onclick="Button1_Click" CommandName='btedit' runat="server" Text="点这里" /></div>后台
protected void repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if(e.CommandName=="btedit")
{
//更新sd_id为2
Button bt = (Button)e.Item.FindControl("btedit");
//重新绑定repeater
}
protected void repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
TextBox tb=(TextBox)e.Item.FindControl("TextBox1");
Button bt = (Button)e.Item.FindControl("btedit");
if(tb.Text=="2")
{
bt.enalble=false;
}
}
}不习惯在这里写编码////..你试验下把...
///比较乱,,上面的repeaterItemCommand事件里,,,执行数据库更新操作..
绑定事件里,,根据ID是不是2,,来判断按钮是不是ENABLE