在字符串中每4个项插入一行新行?

时间:2014-06-19 14:45:49

标签: c# sql count newline stringbuilder

我有一个字符串,一个接一个地设置缩略图,没有换行符。一旦图像达到它们所在区域的最大宽度,图像就会回到下一行。我想在每个第4个缩略图之后插入一个换行符,并且我的代码几乎可以工作,但它会在第1个之后添加一个新行图像 - 这看起来不对。使用7个缩略图图像时,应该只添加一个换行符,这将在第4张图像之后。

以下是用于调用和使用SQL数据库中的缩略图信息构建字符串的类信息:

protected List<GlassItem> GetGlassItems(Guid CurrentPage)
    {
        var items = new List<GlassItem>();
        using (MySqlConnection cn = new MySqlConnection(ConfigurationManager.ConnectionStrings["Sitefinity"].ToString()))
        {
            cn.Open();

            MySqlCommand cmd = new MySqlCommand("SELECT id, BrandID, GlassName, Thumbnail, LargeImage, Ordinal, (SELECT Window_Brands.BrandName FROM Window_Brands WHERE Window_Brands.BrandPage = BrandID) AS BrandName FROM Window_Brand_cutglass WHERE BrandID = ?PageID AND Thumbnail IS NOT NULL AND LargeImage IS NOT NULL ORDER BY Ordinal", cn);
            cmd.Parameters.Add(new MySqlParameter("PageID", CurrentPage.ToString()));

            using (MySqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    if (reader["Thumbnail"].ToString().Length > 1 && reader["LargeImage"].ToString().Length > 1)
                    {
                        items.Add(new GlassItem
                        {
                            LargeImagePath = Revere.GetImagePath(reader["LargeImage"].ToString()),
                            ThumbnailPath = Revere.GetImagePath(reader["Thumbnail"].ToString()),
                            GlassName = reader["GlassName"].ToString()
                        });
                    }
                }
            }
            cn.Close();
        }
        return items;
    }

这是使用GetGlassItems类的一些代码。这是在每第4个项目之后插入新行的位置,但也是在第一个项目之后添加新行:

protected String BuildCutGlass(Guid CurrentPage)
 {
        var items = GetGlassItems(new Guid(CurrentPage.ToString()));
        StringBuilder Glass = new StringBuilder();

        for (int i = 0; i < items.Count; i++)
        {
            Glass.Append(String.Format("<div class='GlassItem'><a href='{0}' class='CutGlassPopup Icon'><img src='{1}' alt='{2}' width='77' height='77' /></a><a href='{0}' class='CutGlassPopup'>{2}</a></div>",
                                        items[i].LargeImagePath,
                                        items[i].ThumbnailPath,
                                        items[i].GlassName));
            Console.Write("count: " + items.Count.ToString() + "<br />");
            if (i == 4)
            {
                // new line every 4 items
                Glass.Append("<div style='clear: both;'></div>");
            }
        }

        return Glass.ToString();
    }

如何编辑上面的代码,以便在第一个缩略图后不再添加新行?

1 个答案:

答案 0 :(得分:3)

您需要使用modulus operator进行检查。

if (i % 4 == 0)

这将允许您每隔四行插入一个新行。

但是这也会为第一个项目插入一个新行,因为i将是00 % 4会返回0。因此,请将支票修改为:

if(i != 0 && i % 4 == 0)

您当前的支票i == 4将仅在前四行之后添加额外的行。