MappedDataFieldCollection

MappedDataFieldCollection class

Permet de mapper automatiquement entre les noms de champs de votre source de données et les noms de champs de publipostage dans le document.

Pour en savoir plus, visitez leFusion et publipostage et création de rapports article documentaire.

public class MappedDataFieldCollection : IEnumerable<KeyValuePair<string, string>>

Propriétés

NomLa description
Count { get; }Obtient le nombre d’éléments contenus dans la collection.
Item { get; set; }Obtient ou définit le nom du champ dans la source de données associée au champ de publipostage spécifié.

Méthodes

NomLa description
Add(string, string)Ajoute un nouveau mappage de champ.
Clear()Supprime tous les éléments de la collection.
ContainsKey(string)Détermine si un mappage du champ spécifié dans le document existe dans la collection.
ContainsValue(string)Détermine si un mappage du champ spécifié dans la source de données existe dans la collection.
GetEnumerator()Renvoie un objet énumérateur de dictionnaire qui peut être utilisé pour parcourir tous les éléments de la collection.
Remove(string)Supprime un mappage de champ.

Remarques

Ceci est implémenté sous la forme d’une collection de clés de chaîne en valeurs de chaîne. Les clés sont les noms des champs de publipostage dans le document et les valeurs sont les noms des champs de votre source de données.

Exemples

Montre comment mapper des colonnes de données et des MERGEFIELD avec des noms différents afin que les données soient transférées entre elles lors d’un publipostage.

public void MappedDataFieldCollection()
{
    Document doc = CreateSourceDocMappedDataFields();
    DataTable dataTable = CreateSourceTableMappedDataFields();

    // La table a une colonne nommée "Colonne2", mais il n'existe aucun MERGEFIELD portant ce nom.
    // Nous avons également un MERGEFIELD nommé "Column3", mais la source de données n'a pas de colonne portant ce nom.
    // Si les données de "Colonne2" conviennent au MERGEFIELD "Colonne3",
    // nous pouvons mapper ce nom de colonne au MERGEFIELD dans la paire clé/valeur "MappedDataFields".
    MappedDataFieldCollection mappedDataFields = doc.MailMerge.MappedDataFields;

    // Nous pouvons lier un nom de colonne de source de données à un nom MERGEFIELD comme celui-ci.
    mappedDataFields.Add("MergeFieldName", "DataSourceColumnName");

    // Liez la colonne de source de données nommée "Column2" aux MERGEFIELD nommés "Column3".
    mappedDataFields.Add("Column3", "Column2");

    // Le nom MERGEFIELD est la "clé" du nom de colonne de source de données respectif "valeur".
    Assert.AreEqual("DataSourceColumnName", mappedDataFields["MergeFieldName"]);
    Assert.True(mappedDataFields.ContainsKey("MergeFieldName"));
    Assert.True(mappedDataFields.ContainsValue("DataSourceColumnName"));

    // Maintenant, si nous exécutons ce publipostage, les MERGEFIELD "Colonne3" prendront les données de la "Colonne2" de la table.
    doc.MailMerge.Execute(dataTable);

    doc.Save(ArtifactsDir + "MailMerge.MappedDataFieldCollection.docx");

    // Nous pouvons parcourir les éléments de cette collection.
    Assert.AreEqual(2, mappedDataFields.Count);

    using (IEnumerator<KeyValuePair<string, string>> enumerator = mappedDataFields.GetEnumerator())
        while (enumerator.MoveNext())
            Console.WriteLine(
                $"Column named {enumerator.Current.Value} is mapped to MERGEFIELDs named {enumerator.Current.Key}");

    // On peut également supprimer des éléments de la collection.
    mappedDataFields.Remove("MergeFieldName");

    Assert.False(mappedDataFields.ContainsKey("MergeFieldName"));
    Assert.False(mappedDataFields.ContainsValue("DataSourceColumnName"));

    mappedDataFields.Clear();

    Assert.AreEqual(0, mappedDataFields.Count);
}

/// <summary>
/// Crée un document avec 2 MERGEFIELD dont un n'a pas de
/// colonne correspondante dans le tableau de données de la méthode ci-dessous.
/// </summary>
private static Document CreateSourceDocMappedDataFields()
{
    Document doc = new Document();
    DocumentBuilder builder = new DocumentBuilder(doc);

    builder.InsertField(" MERGEFIELD Column1");
    builder.Write(", ");
    builder.InsertField(" MERGEFIELD Column3");

    return doc;
}

/// <summary>
/// Créer une table de données avec 2 colonnes dont une sans
/// MERGEFIELD correspondant dans le document source de la méthode ci-dessus.
/// </summary>
private static DataTable CreateSourceTableMappedDataFields()
{
    DataTable dataTable = new DataTable("MyTable");
    dataTable.Columns.Add("Column1");
    dataTable.Columns.Add("Column2");
    dataTable.Rows.Add(new object[] { "Value1", "Value2" });

    return dataTable;
}

Voir également