MappedDataFieldCollection

MappedDataFieldCollection class

Consente di mappare automaticamente i nomi dei campi nell’origine dati e i nomi dei campi della stampa unione nel documento.

Per saperne di più, visita ilStampa unione e reporting articolo di documentazione.

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

Proprietà

NomeDescrizione
Count { get; }Ottiene il numero di elementi contenuti nella raccolta.
Item { get; set; }Ottiene o imposta il nome del campo nell’origine dati associata al campo di stampa unione specificato.

Metodi

NomeDescrizione
Add(string, string)Aggiunge una nuova mappatura dei campi.
Clear()Rimuove tutti gli elementi dalla raccolta.
ContainsKey(string)Determina se nella raccolta esiste una mappatura dal campo specificato nel documento.
ContainsValue(string)Determina se nella raccolta esiste una mappatura dal campo specificato nell’origine dati.
GetEnumerator()Restituisce un oggetto enumeratore dizionario che può essere utilizzato per scorrere tutti gli elementi della raccolta.
Remove(string)Rimuove una mappatura di campo.

Osservazioni

Questo viene implementato come una raccolta di chiavi stringa in valori stringa. Le chiavi sono i nomi dei campi di stampa unione nel documento e i valori sono i nomi dei campi nell’origine dati.

Esempi

Mostra come mappare colonne di dati e MERGEFIELD con nomi diversi in modo che i dati vengano trasferiti tra loro durante una stampa unione.

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

    // La tabella ha una colonna denominata "Column2", ma non esistono MERGEFIELD con quel nome.
    // Inoltre, abbiamo un MERGEFIELD denominato "Column3", ma l'origine dati non ha una colonna con quel nome.
    // Se i dati della "Colonna2" sono adatti al MERGEFIELD della "Colonna3",
    // possiamo mappare il nome della colonna a MERGEFIELD nella coppia chiave/valore "MappedDataFields".
    MappedDataFieldCollection mappedDataFields = doc.MailMerge.MappedDataFields;

    // Possiamo collegare il nome di una colonna di origine dati a un nome MERGEFIELD come questo.
    mappedDataFields.Add("MergeFieldName", "DataSourceColumnName");

    // Collega la colonna dell'origine dati denominata "Column2" ai MERGEFIELD denominati "Column3".
    mappedDataFields.Add("Column3", "Column2");

    // Il nome MERGEFIELD è la "chiave" per il rispettivo nome "valore" della colonna dell'origine dati.
    Assert.AreEqual("DataSourceColumnName", mappedDataFields["MergeFieldName"]);
    Assert.True(mappedDataFields.ContainsKey("MergeFieldName"));
    Assert.True(mappedDataFields.ContainsValue("DataSourceColumnName"));

    // Ora se eseguiamo questa stampa unione, i MERGEFIELD "Column3" prenderanno i dati dalla "Column2" della tabella.
    doc.MailMerge.Execute(dataTable);

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

    // Possiamo eseguire l'iterazione sugli elementi di questa raccolta.
    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}");

    // Possiamo anche rimuovere elementi dalla raccolta.
    mappedDataFields.Remove("MergeFieldName");

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

    mappedDataFields.Clear();

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

/// <summary>
/// Crea un documento con 2 MERGEFIELD, uno dei quali non ha un file
/// colonna corrispondente nella tabella dati dal metodo seguente.
/// </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>
/// Crea una tabella dati con 2 colonne, una delle quali non ha un file
/// MERGEFIELD corrispondente nel documento sorgente dal metodo sopra.
/// </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;
}

Guarda anche