我的webform有一个函数,它使用for循环输出购物车中的每个项目。但是,我的问题是格式化这个字符串,以便它包含制表符空间,并为购物车中的每一项添加一个新行。我的代码如下:
public string Display()
{
CartClass CartList = CartClass.GetCart();
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() + "\n" ));
}
return sb.ToString();
} 还要注意,我使用此函数在asp:listbox中输出此字符串。
private void DisplayCart()
{
lstCart.Items.Clear();
lstCart.Items.Add(cart.Display());
}我出来的是这个

我想要格式类似于一个列表。例如
我怎么才能解决这个问题?
发布于 2014-04-15 17:36:47
假设您希望将每个电影从购物车列表中分离出来,并将每个电影作为一个项添加到ListBox中,则可以使用for循环中的收益率返回来输出一个可枚举的字符串,而不是一个复合字符串,然后可以枚举该列表以将每个项添加到ListBox中。
你可以这样做:
public IEnumerable<string> Display()
{
CartClass CartList = CartClass.GetCart();
for (int i = 0; i < CartList.CartList.Count(); i++)
{
Movies Movie = CartList.CartList[i];
yield return String.Format(i + 1 + "." + "\t"
+ Movie.MovieName + "\t" + "£" + Movie.MovieCost.ToString() + "\n" );
}
}然后在DisplayCart函数中:
private void DisplayCart()
{
lstCart.Items.Clear();
foreach (var movie in cart.Display())
{
lstCart.Items.Add(movie);
}
}发布于 2014-04-15 17:17:44
不清楚您希望在行中显示什么,但假设您希望使用累进数字、MovieName及其用当前货币符号格式化的成本,则可以直接使用AppendFormat方法和复合格式规则。
for (int i = 0; i < CartList.CartList.Count(); i++)
{
Movies Movie = CartList.CartList[i];
sb.AppendFormat("{0}.\t{1}\t{2:C}\n", i+1, Movie.MovieName, Movie.MovieCost);
}这里的关键点是,string.Format和StringBuilder.AppendFormat都需要一个格式字符串,其中包含嵌入大括号({0}....{1})的占位符,其中将插入格式说明符后面的参数。
但是,您的问题是由于将整个字符串生成器添加为一个单一项而引起的。换行符不会将字符串分成两部分,它只是被列表框项集合忽略了。您需要同时添加一个项目。(或者看看凯里先生的答案)
private void DisplayCart()
{
lstCart.Items.Clear();
CartClass CartList = CartClass.GetCart();
for (int i = 0; i < CartList.CartList.Count(); i++)
{
Movies Movie = CartList.CartList[i];
lstCart.Items.Add(string.Format("{0}.\t{1}\t{2:C}",
i+1, Movie.MovieName, Movie.MovieCost);
}
}发布于 2014-04-15 17:26:56
假设你使用的是ASP.Net ListBox控件.
根据HTML规范,任何包含1个或更多空格字符的 序列,在显示在HTML页面上时都会折叠为单个SP (0x20)字符。因此,区别HT (制表符)和SP没有多大意义。
您可能要做的是使用数据绑定来填充列表框。在这种情况下,代码变成如下所示:
CartClass cart = CartClass.GetCart() ;
IEnumerable<Movie> movies = cart.CartList ;
lstCart.DataSource = movies;
lstCart.DataTextField = <property-to-be-displayed-to-user>
lstCart.DataValueField = <property-to-be-used-when-item-is-selected>
lstCart.DataBind(); 如果您真的想格式化一个字符串,您可能会看到这样的操作:
public string Display()
{
CartClass cart = CartClass.GetCart();
StringBuilder sb = new StringBuilder();
for ( int i = 0 ; i < cart.CartList.Count() ; i++ )
{
Movie movie = cart.CartList[i];
sb.AppendFormat("{0}.\t{1}\t{2:C}" , i+1 , movie.MovieName , movie.MovieCost ).AppendLine() ;
}
return sb.ToString();
}C格式说明符是“货币”。假设您在英国,默认的CultureInfo应该将电影成本格式化为适当的英国价格/货币价值。
https://stackoverflow.com/questions/23090247
复制相似问题