2012-11-22 37 views
0

我有一个Repeater Control,其中有各种按钮。启用中继器的所有按钮,除了点击的按钮之外

当按钮被点击时,它需要禁用自己,所以不能再次点击。 工作。

但是,当我单击该按钮时,它需要启用任何其他按钮,但它。

所以,当我点击它时,它需要禁用。当我点击另一个时,必须启用上一个按钮,并且必须禁用该按钮。

所以对我试过:

Button btnLoad = (Button)e.Item.FindControl("btnLoad"); 

foreach (Button b in e.Item.Controls.OfType<Button>().Select(c => c).Where(b => b != btnLoad)) 
{ 
    b.Enabled = true; 
} 

btnLoad.Text = "Currently Viewing"; 
btnLoad.Enabled = false; 

但它不是工作。根据我放置的位置,它要么启用所有的按钮(但仍然改变它的文本),要么根本不做任何事情。

我需要做些什么来完成这项工作?

编辑:的代码这里找到:

protected void rptPdfList_ItemCommand(object source, RepeaterCommandEventArgs e)

这就是为什么我用Button btnLoad = (Button)e.Item.FindControl("btnLoad");

的方法发现:

switch (e.CommandName) 
     { 
      case "LoadDoc": 
       //Above code 
       break; 
     } 
+0

该代码位于何处? –

+0

:/忘了添加它在哪里...添加 – TheGeekZn

回答

0

假设你想在ButtonClick -event处理程序代码:

protected void Button_Clicked(Object sender, EventArgs e) 
{ 
    Button thisButton = (Button) sender; 
    thisButton.Text = "Currently Viewing"; 
    RepeaterItem item = (RepeaterItem) thisButton.NamingContainer; 
    IEnumerable<Button> buttons = item.Controls.OfType<Button>(); 
    foreach(var btn in buttons) 
    { 
     btn.Enabled = btn != thisButton; 
    } 
} 
+0

对不起,我缺乏洞察力。我已经更新了我的问题。 – TheGeekZn

+0

以前的按钮仍然未启用 - 它们保持禁用状态。 – TheGeekZn

+0

@NewAmbition:通过上面的代码或者使用你的'ItemCommand'?您是否在某处回发数据绑定中继器? –

0

尝试一个简单的if语句在一个循环中,如下

Button btnLoad = (Button)e.Item.FindControl("btnLoad"); 
foreach (Control c in e.Item.Controls) 
    { 
     if (b is Button) 
     { 
      if(b == btnLoad) 
      { 
      b.Enabled = false; 
      } 
      else 
      { 
      b.Enabled = true; 
      } 
     } 
    } 
+0

在我的代码中,我已经将你的循环变成了Linq语句..同样的东西真的:/ – TheGeekZn