I've done it using the string data type in the PLC and the Character array tag type in the panelview--not for alarms, but for recipe names. The string data type may contain 82 characters, but my screen width will only allow me to display 28. I configured a message display object. driven by an integer tag type (my recipe number, your alarm number). You may have, say, 50 alarm messages.
Your PLC string file would be 50 elements long. There must be a panelview tag assighed for each string element address. alarm_text_0 thru alarm_text_49--coinciding with string elements 0-49. (or maybe indirect addressing in the PLC could write any of the 50 string elements to a single display tag element--I didn't think of that, before, and I did 90 tags for strings--sheesh. Then you don't need a list, just a data display object with the ascii display tag embedded.)
Embed the alarm_text_0 tag in the text area of state 0 of the message display (panelview calls it embedded variable), alarm_text_1 tag in state 1 of the message display, etc. The message display will have 50 possible states.
If alarm 0 is active, send the value 0 to the integer tag for the meassage display object--and the characters stored in string element 0 are displayed.
If alarm 20 is active, send the value 20 to the integer tag for the meassage display object--and the characters stored in string element 20 are displayed.
In my systen, I use an ascii entry object to allow the operator to change the names of his recipes in the PLC String file.
The point, here, is to use string variables--not ascii. And let the PLC do the work--not the panelview.
The nice thing about doing it with string elements rather than simple text in the panelview is that you can change the wording of the alarms on line, on the fly with the PLC programmer--as opposed to editing and downloading the panelview file.