public void CheckRequired() { var tag = new FormatNumber(); RequiredAttribute.Check(tag); //no exceptions }
public void TestDecimalsRoundingUp() { var number = new FormatNumber(); number.Value = new MockAttribute(new Constant("1.26789")); Assert.That(number.Evaluate(_model), Is.EqualTo("1.27")); }
/// <summary> /// Tries to parse registered format numbers. If the parsing fails, it is assumed that the number is a custom format number (164 or higher) and 'custom' is returned /// </summary> /// <param name="number">Raw number to parse</param> /// <param name="formatNumber">Out parameter with the parsed format enum value. If parsing failed, 'custom' will be returned</param> /// <returns>Format range. Will return 'invalid' if out of any range (e.g. negative value)</returns> public static FormatRange TryParseFormatNumber(int number, out FormatNumber formatNumber) { try { formatNumber = (FormatNumber)number; return(FormatRange.defined_format); } catch { if (number < 0) { formatNumber = FormatNumber.none; return(FormatRange.invalid); } else if (number > 0 && number < CUSTOMFORMAT_START_NUMBER) { formatNumber = FormatNumber.none; return(FormatRange.undefined); } else { formatNumber = FormatNumber.custom; return(FormatRange.custom_format); } } }
public void TestSimpleFormatOfIntWithGroupingDefault() { var number = new FormatNumber(); number.Value = new MockAttribute(new Constant("1000")); Assert.That(number.Evaluate(_model), Is.EqualTo("1,000.00")); }
public void TestSimpleFormatOfStringDifferentCultureInPageModel() { var number = new FormatNumber(); number.Value = new MockAttribute(new Constant("1")); _model.Page[FormatConstants.LOCALE] = new CultureInfo("nl-NL"); Assert.That(number.Evaluate(_model), Is.EqualTo("1,00")); }
public void TestSimpleFormatOfNegativeInt() { _model.Model["anumber"] = -1; var number = new FormatNumber(); number.Value = new MockAttribute(new Property("anumber")); Assert.That(number.Evaluate(_model), Is.EqualTo("-1.00")); }
public void TestSimpleFormatOfString() { var number = new FormatNumber(); number.Value = new MockAttribute(new Constant("1")); Assert.That(number.Evaluate(_model), Is.EqualTo("1.00")); }
public void TestSimpleFormatOfIntWithGroupingExplicitFalseBigNumber() { var number = new FormatNumber(); number.Value = new MockAttribute(new Constant("123456789")); number.GroupingUsed = new MockAttribute(new Constant("false")); Assert.That(number.Evaluate(_model), Is.EqualTo("123456789.00")); }
public void TestSimpleFormatOfIntWithGroupingExplicitTrueBigNumberWithDecimals() { var number = new FormatNumber(); number.Value = new MockAttribute(new Constant("123456789.876543")); number.GroupingUsed = new MockAttribute(new Constant("true")); Assert.That(number.Evaluate(_model), Is.EqualTo("123,456,789.88")); }
public void TestFormatOfNumberExplicit() { var number = new FormatNumber(); number.Value = new MockAttribute(new Property("anumber")); number.Type = new MockAttribute(new Constant("Number")); _model.Model["anumber"] = 12; Assert.That(number.Evaluate(_model), Is.EqualTo("12.00")); }
public void TestFormatOfPercentageWithDecimals() { var number = new FormatNumber(); number.Value = new MockAttribute(new Property("anumber")); number.Type = new MockAttribute(new Constant("Percentage")); _model.Model["anumber"] = 0.012m; Assert.That(number.Evaluate(_model), Is.EqualTo("1.20%")); }
public void TestFormatOfPercentageNegative() { var number = new FormatNumber(); number.Value = new MockAttribute(new Property("anumber")); number.Type = new MockAttribute(new Constant("Percentage")); _model.Model["anumber"] = -0.12m; Assert.That(number.Evaluate(_model), Is.EqualTo("-12.00%")); }
public void TestFormatOfNegativeCurrency() { var number = new FormatNumber(); number.Value = new MockAttribute(new Property("anumber")); number.Type = new MockAttribute(new Constant("Currency")); _model.Model["anumber"] = -12m; Assert.That(number.Evaluate(_model), Is.EqualTo("($12.00)")); //Stupid us formatting }
public void TestFormatOfNumberWithCustomPattern() { var number = new FormatNumber(); number.Value = new MockAttribute(new Property("anumber")); number.Pattern = new MockAttribute(new Constant("###,'abc',###.00000")); _model.Model["anumber"] = 123456.789; Assert.That(number.Evaluate(_model), Is.EqualTo("123,abc456.78900")); }
public void TestFormatOfPercentageWithAlternativePattern() { var number = new FormatNumber(); number.Value = new MockAttribute(new Property("anumber")); number.Type = new MockAttribute(new Constant("Percentage")); number.MinFractionDigits = new MockAttribute(new Constant("6")); _model.Model["anumber"] = 0.12; Assert.That(number.Evaluate(_model), Is.EqualTo("12.000000%")); }
public void TestFormatOfCurrencyWithDifferentCurrencySymbol() { var number = new FormatNumber(); number.Value = new MockAttribute(new Property("anumber")); number.Type = new MockAttribute(new Constant("Currency")); number.CurrencySymbol = new MockAttribute(new Constant("@")); _model.Model["anumber"] = 12m; Assert.That(number.Evaluate(_model), Is.EqualTo("@12.00")); }
public void TestDecimalsMaximalFractionDigits() { var number = new FormatNumber(); number.Value = new MockAttribute(new Property("anumber")); number.MaxFractionDigits = new MockAttribute(new Constant("5")); _model.Model["anumber"] = 1.23456789m; Assert.That(number.Evaluate(_model), Is.EqualTo("1.23457")); _model.Model["anumber"] = 1.23m; Assert.That(number.Evaluate(_model), Is.EqualTo("1.23")); }
public void TestDecimalsMinimalIntegerDigitsWithDefault() { var number = new FormatNumber(); number.Value = new MockAttribute(new Property("anumber")); number.MinIntegerDigits = new MockAttribute(new Constant("10")); _model.Model["anumber"] = 12345m; Assert.That(number.Evaluate(_model), Is.EqualTo("0,000,012,345.00")); _model.Model["anumber"] = 1234567890123m; Assert.That(number.Evaluate(_model), Is.EqualTo("1,234,567,890,123.00")); }
static void Main() { // Присвоить этому делегату несколько целевых методов FormatNumber format = FormatNumberAsCurrency; format += FormatNumberWithCommas; format += FormatNumberWithTwoPlaces; format(12345.6789); Console.ReadKey(); }
public void TestFormatOfCurrencyWithDifferentCurrencySymbolOverridesCodeWithAlternativePattern() { var number = new FormatNumber(); number.Value = new MockAttribute(new Property("anumber")); number.Type = new MockAttribute(new Constant("Currency")); number.CurrencySymbol = new MockAttribute(new Constant("@")); number.CurrencyCode = new MockAttribute(new Constant("RESL")); number.MinFractionDigits = new MockAttribute(new Constant("6")); _model.Model["anumber"] = 12m; Assert.That(number.Evaluate(_model), Is.EqualTo("@12.000000")); }
public void TestDecimalsMaximalIntegerDigits() { var number = new FormatNumber(); number.Value = new MockAttribute(new Property("anumber")); number.MaxIntegerDigits = new MockAttribute(new Constant("10")); number.GroupingUsed = new MockAttribute(new Constant("false")); number.MaxFractionDigits = new MockAttribute(new Constant("0")); _model.Model["anumber"] = 12345m; Assert.That(number.Evaluate(_model), Is.EqualTo("12345")); _model.Model["anumber"] = 1234567890123m; Assert.That(number.Evaluate(_model), Is.EqualTo("4567890123")); }
/// <summary> /// Determines whether a defined style format number represents a date (or date and time) /// </summary> /// <param name="number">Format number to check</param> /// <returns>True if the format represents a date, otherwise false</returns> /// <remarks>Custom number formats (higher than 164), as well as not officially defined numbers (below 164) are currently not considered during the check and will return false</remarks> public static bool IsDateFormat(FormatNumber number) { switch (number) { case FormatNumber.format_14: case FormatNumber.format_15: case FormatNumber.format_16: case FormatNumber.format_17: case FormatNumber.format_22: return(true); default: return(false); } }
static void Main(string[] args) { FormatNumber format = FormatNumberAsCurrency; format += FormatNumberWithCommas; format += FormatNumberWith3Places; format += (n => Console.WriteLine("afgerond: " + Math.Round(n))); format -= FormatNumberWithCommas; format(12345.6789); testSortDelegate(); Console.ReadKey(); }
protected void Page_Load(object sender, EventArgs e) { int idAdmin = (int)Session["employeeId"]; string connStr = "Server=BT; Database=PhoneShop; User=sa; Password=12345678"; SqlConnection conn = new SqlConnection(connStr); conn.Open(); String queryStr = "SELECT shopId,Phones.phoneId, phoneName, manufacturer, phonePrice, imageLink, phoneDescrible, quantity FROM dbo.Phones, PhoneOfShop WHERE (PhoneOfShop.shopId=(SELECT TOP 1 shopId FROM Employees WHERE employeeId='" + idAdmin + "')) AND (Phones.phoneId=PhoneOfShop.phoneId)"; SqlCommand cmd = new SqlCommand(queryStr); cmd.CommandType = System.Data.CommandType.Text; cmd.Connection = conn; SqlDataReader reader = cmd.ExecuteReader(); listPhone = new List <Phone>(); while (reader.Read()) { Phone phone = new Phone(); phone.PhoneId = Int32.Parse(reader["phoneId"].ToString().Trim()); phone.PhoneName = reader["phoneName"].ToString().Trim(); phone.PhonePrice = Int32.Parse(reader["phonePrice"].ToString().Trim()); phone.Manufacturer = reader["manufacturer"].ToString().Trim(); phone.ImageLink = reader["imageLink"].ToString().Trim(); phone.PhoneDescrible = reader["phoneDescrible"].ToString().Trim(); phone.PhoneQuantity = Int32.Parse(reader["quantity"].ToString().Trim()); phone.ShopId = Int32.Parse(reader["shopId"].ToString().Trim()); listPhone.Add(phone); } conn.Close(); foreach (Phone phone in listPhone) { show += "<tr>"; show += "<td><a href='DetailPhone.aspx?id=" + phone.PhoneId + "'>" + phone.PhoneId + "</a></td>"; show += "<td>" + phone.PhoneName + "</td>"; show += "<td>" + FormatNumber.FormatPrice(phone.PhonePrice) + "</td>"; show += "<td>" + phone.PhoneQuantity + "</td>"; show += "<td>" + phone.Manufacturer + "</td>"; show += "<td>" + phone.ShopId + "</td>"; show += "<td><a href='AddAmountPhone.aspx?id=" + phone.PhoneId + "'>Thêm </a></td>"; show += "<td><a href='EditPhone.aspx?id=" + phone.PhoneId + "'>Sửa </a></td>"; show += "<td><a href='DeletePhone.aspx?id=" + phone.PhoneId + "'>Xóa </a></td>"; show += "</tr>"; } }
/// <summary> /// Determines whether a defined style format number represents a time) /// </summary> /// <param name="number">Format number to check</param> /// <returns>True if the format represents a time, otherwise false</returns> /// <remarks>Custom number formats (higher than 164), as well as not officially defined numbers (below 164) are currently not considered during the check and will return false</remarks> public static bool IsTimeFormat(FormatNumber number) { switch (number) { case FormatNumber.format_18: case FormatNumber.format_19: case FormatNumber.format_20: case FormatNumber.format_21: case FormatNumber.format_45: case FormatNumber.format_46: case FormatNumber.format_47: return(true); default: return(false); } }
public void TestDecimalsMinimalAndMaximalFractionDigitsNegative() { var number = new FormatNumber(); number.Value = new MockAttribute(new Property("anumber")); number.MinFractionDigits = new MockAttribute(new Constant("3")); number.MaxFractionDigits = new MockAttribute(new Constant("5")); _model.Model["anumber"] = -1.23m; Assert.That(number.Evaluate(_model), Is.EqualTo("-1.230")); _model.Model["anumber"] = -1.234m; Assert.That(number.Evaluate(_model), Is.EqualTo("-1.234")); _model.Model["anumber"] = -1.2345m; Assert.That(number.Evaluate(_model), Is.EqualTo("-1.2345")); _model.Model["anumber"] = -1.23456m; Assert.That(number.Evaluate(_model), Is.EqualTo("-1.23456")); _model.Model["anumber"] = -1.234567m; Assert.That(number.Evaluate(_model), Is.EqualTo("-1.23457")); }
/// <summary> /// Default constructor /// </summary> public NumberFormat() { Number = FormatNumber.none; CustomFormatCode = string.Empty; CustomFormatID = CUSTOMFORMAT_START_NUMBER; }
public FormatNumberTests() { this._formatNumber = new FormatNumber(); }
protected void Page_Load(object sender, EventArgs e) { showProduct = ""; showProductCat = ""; categories = ""; string connStr = "Server=BT; Database=PhoneShop; User=sa; Password=12345678"; SqlConnection conn = new SqlConnection(connStr); if (Session["area"] != null) { string area = (string)Session["area"]; if (Request.QueryString["category"] == null) { int perPage = 6; int page; if (Request.QueryString["page"] != null) { page = Int32.Parse(Request.QueryString["page"].Trim()); } else { page = 1; } conn.Open(); SqlCommand cmd = new SqlCommand("SELECT shopId,Phones.phoneId, phoneName, manufacturer, phonePrice, imageLink, phoneDescrible, quantity FROM dbo.Phones, PhoneOfShop WHERE (PhoneOfShop.shopId=(SELECT TOP 1 shopId FROM Shops WHERE shopAddress=@address) AND (Phones.phoneId=PhoneOfShop.phoneId))"); cmd.CommandType = System.Data.CommandType.Text; cmd.Connection = conn; cmd.Parameters.Add("@address", SqlDbType.NVarChar, 100).Value = area; SqlDataReader reader = cmd.ExecuteReader(); listPhone = new List <Phone>(); while (reader.Read()) { Phone phone = new Phone(); phone.PhoneId = Int32.Parse(reader["phoneId"].ToString().Trim()); phone.PhoneName = reader["phoneName"].ToString().Trim(); phone.PhonePrice = Int32.Parse(reader["phonePrice"].ToString().Trim()); phone.Manufacturer = reader["manufacturer"].ToString().Trim(); phone.ImageLink = reader["imageLink"].ToString().Trim(); phone.PhoneDescrible = reader["phoneDescrible"].ToString().Trim(); phone.PhoneQuantity = Int32.Parse(reader["quantity"].ToString().Trim()); phone.ShopId = Int32.Parse(reader["shopId"].ToString().Trim()); listPhone.Add(phone); } conn.Close(); //show listphone for (int i = ((page - 1) * perPage); i < page * perPage; i++) { if (listPhone.Count > ((page - 1) * perPage)) { showProduct += "<div class='col-md-4 col-sm-6 center-responsive'>"; showProduct += "<div class='product'>"; showProduct += "<a href='Detail.aspx?id=" + listPhone[i].PhoneId + "&quantity=" + listPhone[i].PhoneQuantity + "'>"; showProduct += "<img class='img-responsive' src='" + listPhone[i].ImageLink + "'>"; showProduct += "<div class='text'>"; showProduct += "<h3>" + listPhone[i].PhoneName + "</h3>"; showProduct += "<p class='price'>" + FormatNumber.FormatPrice(listPhone[i].PhonePrice) + " VNĐ</p>"; showProduct += "<p class='button' align = 'center'<a class='btn btn-primary' href='Detail.aspx?id=" + listPhone[i].PhoneId + "&quantity=" + listPhone[i].PhoneQuantity + "'>" + "Xem chi tiết</a></p>"; showProduct += "</div>"; showProduct += "</a>"; showProduct += "</div>"; showProduct += "</div>"; } if (listPhone.Count == i + 1) { break; } } } if (Request.QueryString["category"] != null) { string manufacturer = Request.QueryString["category"].Trim(); conn.Open(); SqlCommand cmd = new SqlCommand("SELECT [phoneId],[phoneName],[manufacturer],[phonePrice],[imageLink],[phoneDescrible] FROM Phones WHERE manufacturer=@manufacturer"); cmd.CommandType = System.Data.CommandType.Text; cmd.Connection = conn; cmd.Parameters.Add("@manufacturer", SqlDbType.VarChar, 100).Value = manufacturer; SqlDataReader reader = cmd.ExecuteReader(); listPhone = new List <Phone>(); while (reader.Read()) { Phone phone = new Phone(); phone.PhoneId = Int32.Parse(reader["phoneId"].ToString().Trim()); phone.PhoneName = reader["phoneName"].ToString().Trim(); phone.PhonePrice = Int32.Parse(reader["phonePrice"].ToString().Trim()); phone.Manufacturer = reader["manufacturer"].ToString().Trim(); phone.ImageLink = reader["imageLink"].ToString().Trim(); phone.PhoneDescrible = reader["phoneDescrible"].ToString().Trim(); listPhone.Add(phone); } conn.Close(); //show listphone if (listPhone.Count == 0) { showProductCat += "<div class='box'><h1> No Product Found In This Product Categories </h1></div>"; } else { showProductCat += "<div class='box'><h1>" + manufacturer + "</h1></div>"; } for (int i = 0; i < listPhone.Count; i++) { if (listPhone.Count > 0) { showProductCat += "<div class='col-md-4 col-sm-6 center-responsive'>"; showProductCat += "<div class='product'>"; showProductCat += "<a href='Detail.aspx?id=" + listPhone[i].PhoneId + "'>"; showProductCat += "<img class='img-responsive' src='" + listPhone[i].ImageLink + "'>"; showProductCat += "<div class='text'>"; showProductCat += "<h3>" + listPhone[i].PhoneName + "</h3>"; showProductCat += "<p class='price'>" + FormatNumber.FormatPrice(listPhone[i].PhonePrice) + " VNĐ</p>"; showProductCat += "<p class='button' align = 'center'<a class='btn btn-primary' href='Detail.aspx?id=" + listPhone[i].PhoneId + "'>" + "Xem chi tiết</a></p>"; showProductCat += "</div>"; showProductCat += "</a>"; showProductCat += "</div>"; showProductCat += "</div>"; } if (listPhone.Count == i + 1) { break; } } } } else { if (Request.QueryString["category"] == null) { int perPage = 6; int page; if (Request.QueryString["page"] != null) { page = Int32.Parse(Request.QueryString["page"].Trim()); } else { page = 1; } conn.Open(); SqlCommand cmd = new SqlCommand("SELECT [phoneId],[phoneName],[manufacturer],[phonePrice],[imageLink],[phoneDescrible] FROM Phones"); cmd.CommandType = System.Data.CommandType.Text; cmd.Connection = conn; SqlDataReader reader = cmd.ExecuteReader(); listPhone = new List <Phone>(); while (reader.Read()) { Phone phone = new Phone(); phone.PhoneId = Int32.Parse(reader["phoneId"].ToString().Trim()); phone.PhoneName = reader["phoneName"].ToString().Trim(); phone.PhonePrice = Int32.Parse(reader["phonePrice"].ToString().Trim()); phone.Manufacturer = reader["manufacturer"].ToString().Trim(); phone.ImageLink = reader["imageLink"].ToString().Trim(); phone.PhoneDescrible = reader["phoneDescrible"].ToString().Trim(); phone.PhoneQuantity = -1; listPhone.Add(phone); } conn.Close(); //show listphone for (int i = ((page - 1) * perPage); i < page * perPage; i++) { if (listPhone.Count > ((page - 1) * perPage)) { showProduct += "<div class='col-md-4 col-sm-6 center-responsive'>"; showProduct += "<div class='product'>"; showProduct += "<a href='Detail.aspx?id=" + listPhone[i].PhoneId + "'>"; showProduct += "<img class='img-responsive' src='" + listPhone[i].ImageLink + "'>"; showProduct += "<div class='text'>"; showProduct += "<h3>" + listPhone[i].PhoneName + "</h3>"; showProduct += "<p class='price'>" + FormatNumber.FormatPrice(listPhone[i].PhonePrice) + " VNĐ</p>"; showProduct += "<p class='button' align = 'center'<a class='btn btn-primary' href='Detail.aspx?id=" + listPhone[i].PhoneId + "'>" + "Xem chi tiết</a></p>"; showProduct += "</div>"; showProduct += "</a>"; showProduct += "</div>"; showProduct += "</div>"; } if (listPhone.Count == i + 1) { break; } } } if (Request.QueryString["category"] != null) { string manufacturer = Request.QueryString["category"].Trim(); conn.Open(); SqlCommand cmd = new SqlCommand("SELECT [phoneId],[phoneName],[manufacturer],[phonePrice],[imageLink],[phoneDescrible] FROM Phones WHERE manufacturer=@manufacturer"); cmd.CommandType = System.Data.CommandType.Text; cmd.Connection = conn; cmd.Parameters.Add("@manufacturer", SqlDbType.VarChar, 100).Value = manufacturer; SqlDataReader reader = cmd.ExecuteReader(); listPhone = new List <Phone>(); while (reader.Read()) { Phone phone = new Phone(); phone.PhoneId = Int32.Parse(reader["phoneId"].ToString().Trim()); phone.PhoneName = reader["phoneName"].ToString().Trim(); phone.PhonePrice = Int32.Parse(reader["phonePrice"].ToString().Trim()); phone.Manufacturer = reader["manufacturer"].ToString().Trim(); phone.ImageLink = reader["imageLink"].ToString().Trim(); phone.PhoneDescrible = reader["phoneDescrible"].ToString().Trim(); listPhone.Add(phone); } conn.Close(); //show listphone if (listPhone.Count == 0) { showProductCat += "<div class='box'><h1> No Product Found In This Product Categories </h1></div>"; } else { showProductCat += "<div class='box'><h1>" + manufacturer + "</h1></div>"; } for (int i = 0; i < listPhone.Count; i++) { if (listPhone.Count > 0) { showProductCat += "<div class='col-md-4 col-sm-6 center-responsive'>"; showProductCat += "<div class='product'>"; showProductCat += "<a href='Detail.aspx?id=" + listPhone[i].PhoneId + "'>"; showProductCat += "<img class='img-responsive' src='" + listPhone[i].ImageLink + "'>"; showProductCat += "<div class='text'>"; showProductCat += "<h3>" + listPhone[i].PhoneName + "</h3>"; showProductCat += "<p class='price'>" + FormatNumber.FormatPrice(listPhone[i].PhonePrice) + " VNĐ</p>"; showProductCat += "<p class='button' align = 'center'<a class='btn btn-primary' href='Detail.aspx?id=" + listPhone[i].PhoneId + "'>" + "Xem chi tiết</a></p>"; showProductCat += "</div>"; showProductCat += "</a>"; showProductCat += "</div>"; showProductCat += "</div>"; } if (listPhone.Count == i + 1) { break; } } } } //take categories from database conn.Open(); SqlCommand cmdCategories = new SqlCommand("SELECT DISTINCT [manufacturer] FROM Phones"); cmdCategories.CommandType = System.Data.CommandType.Text; cmdCategories.Connection = conn; SqlDataReader readerCategories = cmdCategories.ExecuteReader(); while (readerCategories.Read()) { categories += "<li>"; categories += "<a href='Shop.aspx?category=" + readerCategories["manufacturer"] + "'>" + readerCategories["manufacturer"] + "</a>"; categories += "<li>"; } conn.Close(); }
protected void Page_Load(object sender, EventArgs e) { showSimilarPhone = ""; showListPhone = ""; categories = ""; totalPayment = ""; total = 0; string connStr = "Server=BT; Database=PhoneShop; User=sa; Password=12345678"; SqlConnection conn = new SqlConnection(connStr); if (Session["cart"] != null) { List <ItemCart> listItem = new List <ItemCart>((List <ItemCart>)Session["cart"]); foreach (ItemCart item in listItem) { showListPhone += "<tr>"; showListPhone += "<td><img class='img-responsive' src='" + item.ItemImage + "' alt='' /></td>"; showListPhone += "<td>" + item.ItemName + "</a></td>"; showListPhone += "<td>" + item.Quantity + " </td>"; showListPhone += "<td>" + FormatNumber.FormatPrice(item.ItemPrice) + "</td>"; showListPhone += "<td>" + FormatNumber.FormatPrice(item.Quantity * item.ItemPrice) + "</td>"; showListPhone += "<td><a href='DeletePhoneFromCart.aspx?id=" + item.ItemId + "'>Xóa</td>"; showListPhone += "</tr>"; total += (item.ItemPrice * item.Quantity); } totalPayment = FormatNumber.FormatPrice(total); } else { Response.Write("Session null"); } //show similar phone conn.Open(); SqlCommand cmdSimilarPhone = new SqlCommand("SELECT TOP 4 [phoneId],[phoneName],[manufacturer],[phonePrice],[imageLink],[phoneDescrible] FROM Phones"); cmdSimilarPhone.CommandType = System.Data.CommandType.Text; cmdSimilarPhone.Connection = conn; SqlDataReader readerSimilarPhone = cmdSimilarPhone.ExecuteReader(); List <Phone> listPhone = new List <Phone>(); while (readerSimilarPhone.Read()) { Phone phoneSimilar = new Phone(); phoneSimilar.PhoneId = Int32.Parse(readerSimilarPhone["phoneId"].ToString().Trim()); phoneSimilar.PhoneName = readerSimilarPhone["phoneName"].ToString().Trim(); phoneSimilar.PhonePrice = Int32.Parse(readerSimilarPhone["phonePrice"].ToString().Trim()); phoneSimilar.Manufacturer = readerSimilarPhone["manufacturer"].ToString().Trim(); phoneSimilar.ImageLink = readerSimilarPhone["imageLink"].ToString().Trim(); phoneSimilar.PhoneDescrible = readerSimilarPhone["phoneDescrible"].ToString().Trim(); listPhone.Add(phoneSimilar); } conn.Close(); foreach (Phone phone1 in listPhone) { showSimilarPhone += "<div class='col-md-3 col-sm-6 center-responsive'>"; showSimilarPhone += "<div class='product same-height'>"; showSimilarPhone += "<a href='Detail.aspx?id=" + phone1.PhoneId + "' >"; showSimilarPhone += "<img class='img-responsive' src='" + phone1.ImageLink + "' alt='' />"; showSimilarPhone += "<div class='text'>"; showSimilarPhone += "<h3>"; showSimilarPhone += phone1.PhoneName; showSimilarPhone += "</h3>"; showSimilarPhone += "<p class='price'>" + FormatNumber.FormatPrice(phone1.PhonePrice) + " VNĐ" + "</p>"; showSimilarPhone += "<p class='button' align = 'center'<a class='btn btn-primary' href='Detail.aspx?id=" + phone1.PhoneId + "'>" + "Xem chi tiết</a></p>"; showSimilarPhone += "</div>"; showSimilarPhone += "</a>"; showSimilarPhone += "</div>"; showSimilarPhone += "</div>"; } //take categories from database conn.Open(); SqlCommand cmdCategories = new SqlCommand("SELECT DISTINCT [manufacturer] FROM Phones"); cmdCategories.CommandType = System.Data.CommandType.Text; cmdCategories.Connection = conn; SqlDataReader readerCategories = cmdCategories.ExecuteReader(); while (readerCategories.Read()) { categories += "<li>"; categories += "<a href='Shop.aspx?category=" + readerCategories["manufacturer"] + "'>" + readerCategories["manufacturer"] + "</a>"; categories += "<li>"; } conn.Close(); }