Question

How do I stick HTML formatting into a String object in C#?

Here's what I have:

c.DepartmentAbbr.ToString() + " - (" + c.DepartmentName.ToString() + ")"

where c.DepartmentAbbr.ToString() and c.DepartmentName.ToString() are both fields being selected from a data context using LINQ.

Here's what I essentially want:

"<b>" + c.DepartmentAbbr.ToString() + "</b> - (" + c.DepartmentName.ToString() + ")"

so that the first word shows up in bold. The above just shows the literal text with the bold tags and everything. I assume I will need to use String.Format but I can't quite find a good example that helps me know how to use it to do what I want.

Update

Here are a few more details that I didn't think were important but I think by now they must be.

Here is the control I'm using. ASPX code:

 <telerik:RadComboBox ID="rcbDepartments" runat="server" AppendDataBoundItems="True"
        AutoPostBack="true" NoWrap="true" Width="250px">
        <Items>
            <telerik:RadComboBoxItem Text="All Departments" Value="-1" />
        </Items>
    </telerik:RadComboBox>

And I'm adding items to this control using LINQ in C#:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        var abbr = from c in DB.Departments
                   where c.DepartmentAbbr != "BInst"
                   select c;

        foreach (var c in abbr)
        {
            String s = String.Format("{0} - ({1})", c.DepartmentAbbr, c.DepartmentName);
            rcbDepartments.Items.Add(new RadComboBoxItem(s, c.DepartmentID.ToString()));
        }
    }
}

The RadComboBoxItem object accepts either (), (String text), or (String text, String value), and I am using the latter.

Was it helpful?

Solution 6

As I've researched more and more I've pretty much come to the conclusion that what I want to do is not possible. I'm using a RadComboBox to stick the items into, but I'm having to do some funcky stuff with LINQ on the server side such that I have to stick the items into the combo box using the Items.Add method which only accepts System.String. Thank you all for your help and comments but I think I'm just going to have to make do with what I have in this case.

Here are a few more details that I didn't think were important but I think by now they must be.

Here is the control I'm using. ASPX code:

And I'm adding items to this control using LINQ in C#: protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { var abbr = from c in DB.Departments where c.DepartmentAbbr != "BInst" select c;

        foreach (var c in abbr)
        {
            String s = String.Format("{0} - ({1})", c.DepartmentAbbr, c.DepartmentName);
            rcbDepartments.Items.Add(new RadComboBoxItem(s, c.DepartmentID.ToString()));
        }
    }
}

The RadComboBoxItem object accepts either (), (String text), or (String text, String value), and I am using the latter. I am pretty sure by now that due to the restrictions on the RadComboBoxItem only accepting Strings that I can not do HTML formatting on the items without using the Item Template tags in ASPX. Unfortunately for my situation I can not do this because that was already causing some other problems for me which I why I'm doing what I am currently trying to do.

OTHER TIPS

String.Format("<b>{0}</b> - ({1})", c.DepartmentAbbr, c.DepartmentName)

Here is a great reference to string formatting in C#:

http://blog.stevex.net/string-formatting-in-csharp/

For anyone trying to do this in ASP.NET MVC...

This doesn't work:

<%=String.Format(resourceString, "<b>" & Model.UserName & "</b>")%>

The bold tags are HTML encoded, as you'd expect.

However, this works a treat:

<%=String.Format(resourceString, MvcHtmlString.Create("<b>" & Model.UserName & "</b>")%>
MvcHtmlString s = MvcHtmlString.Create(String.Format("{0} - ({1})", c.DepartmentAbbr, c.DepartmentName));

I think you better change the String s to MvcHtmlString object.

I guess you are looking for a way to have the object c to spit out a HTML formatted string.

Take this as an example:

public class myExample : IFormattable{
   private string myExampleStr;
   public myExample(string sampleStr){
      this.myExampleStr = sampleStr;
   }

   /* Implement an Equals() function - OVERRIDE! */
   public override bool Equal(object obj){
      return true;
   }

   /* Implement an ToString() function - OVERRIDE */
   public override string ToString(){
      return this.myExampleStr;
   }

   /* Implement an GetHashCode() function - OVERRIDE */
   public override int GetHashCode(){
      return this.myExampleStr.GetHashCode();
   }

   /* Here we implement the IFormattable interface */
   public string ToString(string format) {
      return this.ToString(format, null);
   }

   public string ToString(IFormatProvider formatProvider) {
      return this.ToString(null, formatProvider);
   }

   public string ToString(string format, IFormatProvider formatProvider) {
      if (string.IsNullOrEmpty(format)) format = "G";
      if (formatProvider != null) {
         ICustomFormatter formatter = formatProvider.GetFormat(this.GetType()) as ICustomFormatter;
         if (formatter != null)
            return formatter.Format(format, this, formatProvider);
      }
      switch (format) {
         case "b": return string.Format("<b>{0}</b>", this.myExampleStr);
         case "i": return string.Format("<i>{0}</i>", this.myExampleStr);
         default: return this.myExampleStr;
      }
   }
}

And suppose we instantiated this class like this:

myExample example = new myExample("tommieb75");

And issue a simple ToString() call on the object to print out a HTML tag for bold as shown below

Console.WriteLine("{0}", example.ToString("b"));
// Output would be <b>tommieb75</b>

This example serves to illustrate how to use a custom parameter to the ToString() method so that you can use bold or italic HTML tags embedded, or any other way of formatting a value based on the parameter used for the ToString function of this class.

Does this answer your question?

I think the problem is somewhere else. Are you putting this string in a Label control or a Literal control? If it's a Label, I believe it's escaping the text for you. Put it in an asp:Literal control instead. And btw, you don't need to call .ToString() so much. You can just use:

"<b>" + c.DepartmentAbbr + "</b> - (" + c.DepartmentName + ")"

and ToString() will essentially be called for you.

If you're outputting this on a webpage - try using the:

Server.HtmlEncode(string)
Server.HtmlDecode(string)

methods.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top