MappedDataFieldCollection

MappedDataFieldCollection class

Consente di mappare automaticamente i nomi dei campi nella sorgente dati e i nomi dei campi di unione dati nel documento.

Per saperne di più, visita ilUnione di posta e creazione di report 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 unione di stampa 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 del dizionario che può essere utilizzato per scorrere tutti gli elementi nella raccolta.
Remove(string)Rimuove una mappatura di campo.

Osservazioni

Questa operazione viene implementata come una raccolta di chiavi stringa in valori stringa. Le chiavi sono i nomi dei campi di 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 di essi durante una stampa unione.

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

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

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

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

    // Il nome MERGEFIELD è la "chiave" per il nome "valore" della colonna della rispettiva 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 da "Column2" della tabella.
    doc.MailMerge.Execute(dataTable);

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

    // Possiamo scorrere gli 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 collezione.
    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
/// 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
/// 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