views:

188

answers:

5

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:

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.

A: 

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

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

methods.

wows
I actually just tried this. Unfortunately, all this really seems to do is change the '<' and '>' character to their entities "<" and >" and then displaying the string with these all showing.
sanpaco
+5  A: 
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/

joshcomley
I actually found that one while doing some research. It is a great reference indeed but doesn't answer my question.
sanpaco
A: 

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.

Dave Markle
I tried that and it still does the same thing.
sanpaco
Did you try using asp:Literal or tried removing ToString() methods?
Serhat Özgel
I tried removing the ToString() methods. I can't use an asp:Literal because I am already within a combobox control.
sanpaco
That's your real problem then. You *can not* do what you are attempting inside a combo box. You will have to use another control entirely.
Dave Markle
A: 

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?

Hope this helps, Best regards, Tom.

tommieb75
I appreciate the answer but this seems to be just a bit more complicated way of doing what I've already tried using the String.Format method. The problem is that I'm using a RadComboBox control to add these to and I'm pretty sure by now that this control doesn't allow me to do HTML formatting on the objects as I enter them. the only option I have is to use an Item Template which I can not do in this case because of an entirely different problem I was already dealing with which caused me to switch to my current method.
sanpaco
A: 

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.

sanpaco