Office çözümlerinde denetimlere veri bağlama

Microsoft Office Word belgesinde veya Microsoft Office Excel çalışma sayfasında Windows Forms denetimlerini ve konak denetimlerini bir veri kaynağına bağlayarak denetimlerin verileri otomatik olarak görüntülemesini sağlayabilirsiniz. Hem uygulama düzeyi hem de belge düzeyi projelerindeki denetimlere veri bağlayabilirsiniz.

Şunlar için geçerlidir: Bu konudaki bilgiler belge düzeyi projeler ve VSTO Eklenti projeleri için geçerlidir. Bkz. Office uygulaması ve proje türüne göre kullanılabilen özellikler.

Konak denetimleri, Word'deki içerik denetimleri ve Excel'deki adlandırılmış aralıklar gibi Word ve Excel nesne modellerindeki nesneleri genişletir. Daha fazla bilgi için bkz . Konak öğelerine ve konak denetimlerine genel bakış.

Hem Windows Forms hem de konak denetimleri, veri kümeleri ve veri tabloları gibi veri kaynaklarına hem basit veri bağlamayı hem de karmaşık veri bağlamayı destekleyen Windows Forms veri bağlama modelini kullanır. Windows Forms'daki veri bağlama modeli hakkında tam bilgi için bkz . Veri bağlama ve Windows Forms.

Basit veri bağlama

Bir denetim özelliği, veri tablosundaki bir değer gibi tek bir veri öğesine bağlandığında basit veri bağlaması vardır. Örneğin, denetimin NamedRange bir veri kümesindeki bir Value2 alana bağlanabilen bir özelliği vardır. Veri kümesindeki alan değiştiğinde, adlandırılmış aralıktaki değer de değişir. Denetim dışındaki tüm konak denetimleri basit veri bağlamayı XMLNodes destekler. Denetim XMLNodes bir koleksiyondur ve bu nedenle veri bağlamayı desteklemez.

Bir konak denetimine basit veri bağlama gerçekleştirmek için denetimin DataBindings özelliğine bir Binding ekleyin. Binding Nesnesi, denetimin özellik değeri ile veri öğesinin değeri arasındaki basit bağlamayı temsil eder.

Aşağıdaki örnek, özelliğin belge düzeyi projesindeki Value2 bir veri öğesine nasıl bağlanacağını gösterir.

Binding binding1 = new Binding("Value2", ds, "Customers.Names", true);
namedRange1.DataBindings.Add(binding1);

Basit veri bağlamayı gösteren izlenecek yollar için bkz . İzlenecek yol: Belge düzeyi projesi için belge düzeyi projesinde basit veri bağlama ve İzlenecek yol: VSTO Eklentisi projesi için VSTO Eklenti projesinde basit veri bağlama.

Karmaşık veri bağlama

Bir denetim özelliği bir veri tablosundaki birden çok sütun gibi birden fazla veri öğesine bağlı olduğunda karmaşık veri bağlaması vardır. ListObject Excel denetimi, karmaşık veri bağlamayı destekleyen tek konak denetimidir. Ayrıca, denetim gibi karmaşık veri bağlamayı DataGridView destekleyen birçok Windows Forms denetimi de vardır.

Karmaşık veri bağlama gerçekleştirmek için, denetimin özelliğini karmaşık veri bağlama tarafından desteklenen bir veri kaynağı nesnesine ayarlayın DataSource . Örneğin, denetimin DataSourceListObject özelliği bir veri tablosundaki birden çok sütuna bağlanabilir. Veri tablosundaki tüm veriler denetimde ListObject görünür ve veri tablosundaki veriler değiştikçe de ListObject değişir. Karmaşık veri bağlama için kullanabileceğiniz veri kaynaklarının listesi için bkz . Windows Forms tarafından desteklenen veri kaynakları.

Aşağıdaki kod örneği iki DataTable nesne içeren bir DataSet oluşturur ve tablolardan birini verilerle doldurur. Kod daha sonra öğesini ListObject veri içeren tabloya bağlar. Bu örnek, Excel belge düzeyi projesine yöneliktir.

private void ListObject_DataSourceAndMember()
{
    // Create a DataSet and two DataTables.
    DataSet ordersDataSet = new DataSet("ordersDataSet");
    DataTable tableCustomers = new DataTable("Customers");
    DataTable tableProducts = new DataTable("Products");
    ordersDataSet.Tables.Add(tableCustomers);
    ordersDataSet.Tables.Add(tableProducts);

    // Add a data to the Customers DataTable.
    tableCustomers.Columns.Add(new DataColumn("LastName"));
    tableCustomers.Columns.Add(new DataColumn("FirstName"));
    DataRow dr = tableCustomers.NewRow();
    dr["LastName"] = "Chan";
    dr["FirstName"] = "Gareth";
    tableCustomers.Rows.Add(dr);

    // Create a list object.
    Microsoft.Office.Tools.Excel.ListObject list1 = 
        this.Controls.AddListObject(
        this.Range["A1"], "Customers");

    // Bind the list object to the Customers table.
    list1.AutoSetDataBoundColumnHeaders = true;
    list1.DataSource = ordersDataSet;
    list1.DataMember = "Customers";
}

Karmaşık veri bağlamayı gösteren bir izlenecek yol için bkz . Belge düzeyi projesi için belge düzeyi projesinde İzlenecek yol: Karmaşık veri bağlama.

Belgelerde ve çalışma kitaplarında verileri görüntüleme

Belge düzeyindeki projelerde, Windows Forms'da kullandığınız gibi, belgelerinize veya çalışma kitaplarınıza kolayca veriye bağlı denetimler eklemek için Veri Kaynakları penceresini kullanabilirsiniz. Veri Kaynakları penceresini kullanma hakkında daha fazla bilgi için bkz. Visual Studio'daki verilere Windows Forms denetimlerini bağlama ve Yeni veri kaynakları ekleme.

Denetimleri Veri Kaynakları penceresinden sürükleyin

Veri Kaynakları penceresinden bir nesneyi belgeye sürüklediğinizde belgede bir denetim oluşturulur. Oluşturulan denetimin türü, tek bir veri sütununu mu yoksa birden çok veri sütununu mu bağladığınıza bağlıdır.

Excel için, çalışma sayfasında her bir alan için bir NamedRange denetim oluşturulur ve her veri aralığı için birden çok satır ve sütun içeren bir ListObject denetim oluşturulur. Veri Kaynakları penceresinde tabloyu veya alanı seçip açılan listeden farklı bir denetim seçerek bu varsayılan ayarı değiştirebilirsiniz.

ContentControl Belgelere bir denetim eklenir. İçerik denetiminin türü, seçtiğiniz alanın veri türüne bağlıdır.

Belge düzeyindeki projelerdeki verileri tasarım zamanında bağlama

Aşağıdaki konular, tasarım zamanında veri bağlama örneklerini gösterir:

VSTO Eklenti projelerinde veri bağlama

VSTO Eklenti projelerinde yalnızca çalışma zamanında denetim ekleyebilirsiniz. Aşağıdaki konular çalışma zamanında veri bağlama örneklerini gösterir:

Konak denetimlerine bağlı verileri güncelleştirme

Veri kaynağı ile konak denetimi arasında veri bağlama, iki yönlü bir veri güncelleştirmesi içerir. Basit veri bağlamada, veri kaynağındaki değişiklikler konak denetimine otomatik olarak yansıtılır, ancak konak denetimindeki değişiklikler, veri kaynağını güncelleştirmek için açık bir çağrı gerektirir. Bunun nedeni, bazı durumlarda veriye bağlı bir alandaki değişikliklerin başka bir veriye bağlı alandaki değişikliklerle birlikte gelmediği sürece kabul edilmemesidir. Örneğin, biri yaş, biri yıllık deneyim olmak üzere iki alanınız olabilir. Deneyim yaşı aşamaz. Bir kullanıcı, değişiklikleri aynı anda yapmadığı sürece yaşı 50'den 25'e ve ardından 30'dan 10'a kadar olan deneyimi güncelleştiremez. Bu sorunu çözmek için, basit veri bağlaması olan alanlar güncelleştirmeler kod tarafından açıkça gönderilene kadar güncelleştirilmez.

Basit veri bağlamayı etkinleştiren konak denetimlerinden bir veri kaynağını güncelleştirmek için, güncelleştirmeleri bellek içi veri kaynağına (veya DataTablegibiDataSet) ve çözümünüz kullanıyorsa arka uç veritabanına göndermeniz gerekir.

Denetimi kullanarak ListObject karmaşık veri bağlama gerçekleştirirken bellek içi veri kaynağını açıkça güncelleştirmeniz gerekmez. Bu durumda, değişiklikler ek kod olmadan otomatik olarak bellek içi veri kaynağına gönderilir.

Daha fazla bilgi için bkz . Nasıl yapılır: Bir veri kaynağını konak denetimindeki verilerle güncelleştirme.