2014-04-15 4 views
0

장바구니 내용의 탭 구분 문자열을 작성하고 싶습니다. for 루프를 사용하여 목록을 순환하므로 장바구니의 항목은 출력되지만 해당 목록의 마지막 항목 만 출력됩니다.for 루프를 사용하여 목록에 항목 인쇄

public string Display() 
{ 
    CartClass CartList = CartClass.GetCart(); 
    String display = "" ; 

    for (int i = 0; i < CartList.CartList.Count(); i++) 
    { 
     Movies Movie = CartList.CartList[i]; 
     display = String.Format(i + 1 + "." + "\t" + 
      Movie.MovieName + "\t" + "£" + Movie.MovieCost.ToString()); 
    } 
    return display; 
} 

어떻게 해결할 수 있습니까?

사이드 노트 : 궁극적으로 웹 페이지에 표시하는 데 사용 하겠지만, 지금은 모든 항목에 텍스트가 표시되지 않는 이유를 이해하고자합니다.

+0

@Habib - "는 ASP.Net MVC보기에서 데이터를 렌더링 것이 아니라, 즉시 변수로 수집하려고" "웹폼에 대한 리피터"사용을 말하거나 답변을 실제로 아무도 .... –

+0

레몬 - 제거 고려하지 "웹 사이트"부분은이 질문에서 실제로 응답이 의미를 갖습니다. –

+0

"웹 양식"은 ASP.Net에서 "웹 사이트"("브라우저에 HTML 페이지를 제공하는 것"과 같은 광범위한 의미로)를 만들기위한 단 하나의 옵션입니다 ... 그래서 편집이 실제로 생각하지 않습니다. HTML을 참조하십시오. 내 편집에 동의하는지 확인하십시오. 되돌릴 수 있습니다. –

답변

12

각 루프 반복에서 지정을하고 있기 때문에 마지막 부분 만 표시됩니다. = 대신 +=을 입력해야합니다. 큰 문자열을 구축하기위한 StringBuilder를 사용하는 것이 일반적으로 더 나은 것을

public string Display() 
{ 
    CartClass CartList = CartClass.GetCart(); 
    String display = "" ; 

    for (int i = 0; i < CartList.CartList.Count(); i++) 
    { 
     Movies Movie = CartList.CartList[i]; 
     display += String.Format(i + 1 + "." + "\t" + 
      Movie.MovieName + "\t" + "£" + Movie.MovieCost.ToString()) + "\n"; 
    } 
    return display; 
} 

참고.

+0

많은 감사! 나는 전에 + +를 만난 적이 없으며 그 해결책이 효과가 있습니다! – Lemons

+0

+0 : 일반적으로 올바르지 만 "웹 사이트를 만들려고합니다"라는 부분에 유의하십시오. 문자열 연결/\ t로 서식이 지정된 HTML을 명확하게 작성하는 것이 올바른 방법이 아닙니다. –

+0

@AlexeiLevenkov, 안녕하세요, 탭 공간을 만드는 데 올바른 방법은 무엇입니까? 그리고 새로운 라인? – Lemons

8

당신은 정말 StringBuilder 여기에 사용되어야한다

System.Text.StringBuilder sb = new StringBuilder(); 
for (int i = 0; i < CartList.CartList.Count(); i++) 
{ 
    Movies Movie = CartList.CartList[i]; 
    sb.Append(String.Format(i + 1 + "." + "\t" + Movie.MovieName + "\t" + "£" + Movie.MovieCost.ToString())); 
} 
return sb.ToString(); 
2

당신은 루프의 다음 항목으로 변수의 값을 교체 ...를 추가하려고합니다.

display += String.Format(i + 1 + "." + "\t" + Movie.MovieName + "\t" + "£" + Movie.MovieCost.ToString()); 
2

= 기호를 사용하여 + = 또는 문자열 작성자 클래스를 사용해야하는 표시 텍스트를 설정하고 있습니다.

2

표시 변수를 대체하고 있습니다. 난 당신이 원하는 생각

public string Display() 
{ 
    CartClass CartList = CartClass.GetCart(); 
    String display = "" ; 

    for (int i = 0; i < CartList.CartList.Count(); i++) 
    { 
     Movies Movie = CartList.CartList[i]; 
     display += String.Format(i + 1 + "." + "\t" + Movie.MovieName + "\t" + "£" + Movie.MovieCost.ToString()); 

    } 
    return display; 
} 
2

을 CONCAT보십시오.

public string Display() 
{ 
CartClass CartList = CartClass.GetCart(); 
String display = "" ; 

for (int i = 0; i < CartList.CartList.Count(); i++) 
{ 
    Movies Movie = CartList.CartList[i]; 
    display += String.Format(i + 1 + "." + "\t" + Movie.MovieName + "\t" + "£" + Movie.MovieCost.ToString()); 
} 
return display; 
} 
1

: 당신은 (통지 +=)를 다음과 같이 표시 할 각 항목을 연결할 필요가 +=

2

각 루프마다 display을 덮어 쓰고 있습니다.

간단한 변화는 =+=에 변경하는 것입니다 :

//  V----- 
    display += String.Format(i + 1 + "." + "\t" + Movie.MovieName + "\t" + "£" + Movie.MovieCost.ToString()); 

을하지만 당신은 문자열의 많은 경우 당신은 StringBuilder 더 성능이 좋은 찾을 수 있습니다.

3

이미 다른 답변은 Concatnation 연산자 +을 사용하여 String을 추가해야한다고 지적 했으므로 StringBuilder을 사용할 것을 제안합니다.

StringBuilder sb = new StringBuilder(); 
for (int i = 0; i < CartList.CartList.Count(); i++) 
    { 
     Movies Movie = CartList.CartList[i]; 
     sb .Append(String.Format(i + 1 + "." + "\t" + Movie.MovieName + "\t" + "£" + Movie.MovieCost.ToString()); 
    } 
    return sb.ToString(); 
+0

반환 값을'sb.ToString()'으로 변경하십시오. –

+0

@TMcKeown : 예. :) 고마워요. –

관련 문제