void InitializeRichEdit(object ds)
        {
            RichEditMailMergeOptions options = richEdit.Options.MailMerge;

            options.DataSource     = null;
            options.DataSource     = ds;
            options.ViewMergedData = true;
        }
        private void PopulatePopupMenu()
        {
            RichEditMailMergeOptions        mailMergeOptions      = RichEditControl.Options.MailMerge;
            DataBindingController           mergeFieldsController = new DataBindingController(mailMergeOptions.DataSource, mailMergeOptions.DataMember);
            List <string>                   columnNames           = mergeFieldsController.ColumnNames;
            Dictionary <string, BarSubItem> subItems = new Dictionary <string, BarSubItem>();

            for (int i = 0; i < columnNames.Count; i++)
            {
                string fullColumnName = columnNames[i];

                int dotIndex = fullColumnName.IndexOf('.');

                if (dotIndex == -1)
                {
                    InsertMergeFieldMenuItem item = new CustomInsertMergeFieldMenuItem(RichEditControl, new MergeFieldName(fullColumnName));
                    this.popupMenu.ItemLinks.Add(item);
                }
                else
                {
                    string groupName  = fullColumnName.Substring(0, dotIndex);
                    string columnName = fullColumnName.Substring(groupName.Length + 1);

                    if (!subItems.ContainsKey(groupName))
                    {
                        BarSubItem subItem = new BarSubItem();
                        subItem.Caption = groupName;
                        subItems.Add(groupName, subItem);
                        this.popupMenu.ItemLinks.Add(subItem);
                    }

                    InsertMergeFieldMenuItem item = new CustomInsertMergeFieldMenuItem(RichEditControl, new MergeFieldName(fullColumnName, columnName));
                    subItems[groupName].ItemLinks.Add(item);
                }
            }
        }