2011-10-17 11 views
0

Solution suggested hereにしようとしましたが、私のケースでは機能しませんでした。私のページの任意の要素にPage.Controls.IndexOf()を使用すると、ItemDataBoundイベントメソッドで呼び出されたときに-1が返されます。ItemDataBoundイベント内の別のコントロールの前にコントロールを挿入します

私のデータリピータによって生成されたものについて、特定の条件に基づいて改行を挿入する必要があります。方法は次のとおりです。

private String lastCharacter = ""; 
public void users_ItemDataBound(Object Sender, RepeaterItemEventArgs e) 
{ 
    HyperLink link = (HyperLink)e.Item.FindControl("micrositeLink"); 

    Tuple<String, String> user = (Tuple<String, String>)e.Item.DataItem; 
    link.NavigateUrl = "/" + user.Item1; 
    link.Text = user.Item2; 

    // makes a break in the data when going from one bunch of data to another. 
    if (user.Item1.Length >= 2) 
    { 
     if (lastCharacter == "") 
      lastCharacter = user.Item1[1].ToString().ToLower(); 
     else if (lastCharacter != user.Item1[1].ToString().ToLower()) 
     { 
      HtmlGenericControl lineBreak = new HtmlGenericControl("br"); 
      if (Page.Controls.IndexOf(link) >= 0) 
       Page.Controls.AddAt(Page.Controls.IndexOf(link), lineBreak); 

      lastCharacter = user.Item1[1].ToString().ToLower(); 
     } 
    } 
} 

バインドされたデータは、システム内で特定の文字で始まる名前のユーザーの一覧です。私の目標は、このデータを同じ2番目の文字を持つデータのグループ間の改行でさらに細分することです。たとえば、

AaPerson Aarad AaStuff 
Aathing 

AbItem AbStuff 

Acan Achandle  

私には、2番目の文字が変更される要素の前に改行を挿入することは明らかな解決策ですが、他の提案も認められます。

+0

をあなたは 'Tuple'を入力するために' e.Item.DataItem'をキャストしているのはなぜ? –

+0

これは基本的なdataItemです: 'List > users = getUsers(Request.QueryString [" letter "]); micrositeList.DataSource =ユーザー; micrositeList.DataBind(); '型指定されたものではなく、タプルを使用しているのは、型指定されたものが' HttpRuntime.Cache'に問題を起こすからです。 – Oliver

+0

代わりに 'ItemDataBound'イベントで' DataBinder.Eval'を使うことを考えましたか? –

答えて

2

代わりe.Item.Controls.IndexOfを使用してみてください:

if (e.Item.Controls.IndexOf(link) >= 0) 
    e.Item.Controls.AddAt(e.Item.Controls.IndexOf(link), lineBreak); 
関連する問題