2013-02-05 71 views
0

我有以下<asp:Repeater>是以下內容:我需要更改由用戶挑選的轉發器內部botton的前景色。在beginnig中,所有按鈕(中繼器中的項目)都是灰色的。當點擊某人時,我需要將它的前景更改爲紅色(如麪包屑)。查找和直放站更改特定項目

我一直試圖找到在itemDataBound的項目,並比較UNIQUEID,但它不工作,我不知道如何找到被點擊改變前景色特定項目:

protected void repMenuParent_OnItemDataBound(object Sender, RepeaterItemEventArgs e) 
{   
    String sessionID = ""; 
    Button btnRepeater; 

    if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem)) 
    { 
     btnRepeater = (Button)e.Item.FindControl("btnRepeaterParent"); 

     if (btnRepeater != null) 
     {     
      if(btnRepeater.UniqueID.Equals(sessionID)) 
      { 
       btnRepeater.ForeColor = System.Drawing.Color.FromArgb(69, 187, 32); 
      } 
     } 
    }    
} 

我讀過許多博客的主題有關中繼器,並找到它的項目,但不容找到任何解決我的問題,能幫幫我嗎?

+0

你重新綁定_OnItemCommand事件之後的某個地方電網被擊中? –

+0

@ user2044081你在哪裏檢索'Session [「souceId」]'值? – MarcusVinicius

+0

不,不存在重新綁定,而是中繼器不是網格。 – dashaRe

回答

2

我覺得這個問題是最好的Javascript解決雖然我對你有一個服務器端解決方案。

命令事件對象有一個名爲CommandSource屬性。這使您可以訪問觸發命令事件的按鈕。

protected void repMenuParent_OnItemCommand(object source, RepeaterCommandEventArgs e) 
{ 
    Button btnRepeater=e.CommandSource; 
    btnRepeater.ForeColor = Drawing.Color.Red; 
} 
+0

嗨spence0021,謝謝你的時間! – dashaRe

+0

這個解決方案我以前嘗試過,但如果用戶點擊不同的按鈕,他點擊的所有按鈕保持紅色。 – dashaRe

+0

任何想法只保留一個按鈕爲紅色每次點擊? – dashaRe

0

如果保持按下按鈕的ID的列表,那麼你可以做到以下幾點:

首先,在中繼器改變你的按鈕,使用CommandArgumentCommandName。像這樣:

<asp:Button id="btnRepeaterParent" ... CommandArgument='<%# Eval("NOMBRE") %>' /> 

創建用於訪問ID列表的頁面級屬性。像這樣:

public List<string> ClickedIds 
{ 
    get 
    { 
     if(Session("ClickedIds") == null) 
     Session("ClickedIds") = new List<string>(); 

     return (List<string>)Session("ClickedIds"); 
    } 
} 

當單擊您的中繼器的按鈕中的一個,處理它,像這樣:

protected void repMenuParent_OnItemCommand(object source, RepeaterCommandEventArgs e) 
{ 
    this.ClickedIds.Add(e.CommandArgument);  
} 

現在,當你要綁定的中繼器代碼隱藏,檢查像每個按鈕所以:

protected void repMenuParent_OnItemDataBound(object Sender, RepeaterItemEventArgs e) 
{   

    if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem)) 
    { 
     //retrieve the id of the data item 
     //I am not sure of your data item structure, but it will be something to this effect 
     int nombre = e.Item.DataItem("NOMBRE"); 

     if(this.ClickedIds.Contains(nombre)) 
     { 
     ((Button)e.Item.FindControl("btnRepeaterParent")).ForeColor = System.Drawing.Color.FromArgb(69, 187, 32); 
     } 
    }    
} 

免責聲明: 我沒有測試過此代碼。

+0

當測試此代碼我已經獲得這個錯誤:「System.String」爲類型「System.Collections.Generic.List'1 [系統。字符串] – dashaRe

+0

因爲命令是aString而改變了一點,「NAME」實際上是一個字符串ID – dashaRe

+0

@dashaRe:我編輯了我的答案以反映ID是字符串。這有幫助嗎? –