Aracılığıyla paylaş


İzlenecek Yol: Word Eylemler Bölmesinde Denetimlere Veri Bağlama

Bu anlatımda Microsoft Office Word'deki bir eylem bölmesinde denetimlere nasıl veri bağlanacağı gösterilir. Denetimler, SQL Server veritabanındaki tablolar arasındaki master/detail ilişkisini gösterir.

Uygulama alanı: Bu konudaki bilgiler Word 2007 ve Word 2010 uygulamalarının belge düzeyi projelerine yöneliktir. Daha fazla bilgi için bkz. Office Uygulamalarında Kullanılabilir Özellikler ve Proje Türü.

Bu anlatım aşağıdaki görevleri gösterir:

  • Eylemler bölmesi denetimini veriye bağlanmış Windows Forms denetimleriyle oluşturma.

  • Denetimlerdeki veriyi görüntülemek için master/detail ilişkisini kullanma.

  • Uygulama açıldığında eylemler bölmesini gösterme.

Not

Bilgisayarınız, aşağıdaki yönergelerde yer alan Visual Studio kullanıcı arayüzü öğelerinden bazıları için farklı adlar veya konumlar gösterebilir. Bu öğeleri bilgisayarınızdaki Visual Studio sürümü ve kullandığınız ayarlar belirler. Daha fazla bilgi için bkz. Ayarlar ile çalışma.

Önkoşullar

Bu anlatımı tamamlamak için aşağıdaki bileşenlere ihtiyacınız vardır:

-

Microsoft Office geliştirici araçlarını içeren bir Visual Studio 2010 sürümü. Daha fazla bilgi için bkz: [Office Çözümeri Geliştirmek İçin Bilgisayarı Yapılandırma](bb398242\(v=vs.100\).md).
  • Word 2007 veya Word 2010.

  • Northwind SQL Server örnek veritabanı olan bir sunucuya erişim.

  • SQL Server veritabanı üzerinde okuma ve yazma izinleri.

Projeyi Oluşturma

İlk adım Word Belge projesi oluşturmaktır.

Yeni bir proje oluşturmak için

  • My Word Actions Pane adında bir Word Belge projesi oluşturun. Sihirbazda Yeni belge oluştur'u seçin.

    Daha fazla bilgi için bkz. Nasıl Yapılır: Visual Studio'da Office Projeleri Oluşturma.

    Visual Studio yeni Word belgesini tasarımcıda açar ve My Word Actions Pane projesini Çözüm Gezgini'e ekler.

Eylemler Bölmesine Denetim Ekleme

Bu anlatımda, veri bağlanmış Windows Forms denetimleri içeren eylemler bölmesi denetimine ihtiyacınız vardır. Projeye veri kaynağı ekleyin ve Veri Kaynakları penceresinden eylemler bölmesi denetimine denetimleri sürükleyin.

Eylemler bölmesi denetimi eklemek için

  1. Çözüm Gezgini'nde My Word Actions Pane projesini seçin.

  2. Proje menüsünde, Yeni Öğe Ekle'yi tıklayın.

  3. Yeni Öğe Ekle iletişim kutusunda, Eylemler Bölmesi Denetimi'ni seçin ve ActionsControl olarak adlandırın, sonra da Ekle'yi tıklatın.

Projeye yeni bir veri kaynağı eklemek için

  1. Veri Kaynakları penceresi görünür değilse, Veri menüsünde Veri Kaynağını Göster seçeneğini tıklatın.

    Not

    Veri Kaynağını Göster kullanılabilir değilse, Word belgesini tıklatın ve tekrar bakın.

  2. Veri Kaynağı Yapılandırma Sihirbazı'nı başlatmak için Yeni Veri Kaynağı Ekle'yi tıklatın.

  3. Veritabanı'nı seçin ve sonra İleri'yi tıklatın.

  4. Northwind örnek SQL Server veritabanına bir veri bağlantısı seçin veya Yeni Bağlantı düğmesini kullanarak yeni bir bağlantı ekleyin.

  5. İleri düğmesini tıklatın.

  6. Bağlantıyı kaydetme seçeneği işaretliyse temizleyin ve İleri'yi tıklatın.

  7. Veritabanı nesneleri penceresindeki Tablolar düğümünü genişletin.

  8. Suppliers ve Products tablolarının yanındaki onay kutusunu seçin:

  9. Son düğmesini tıklatın.

Sihirbaz Suppliers tablosunu ve Products tablosunu Veri Kaynakları penceresine ekler. Ayrıca, Çözüm Gezgini'nde görünür olan türü belirtilmiş bir veri kümesini de ekler.

Eylemler bölmesi denetimine veri bağımlı Windows Forms denetimi eklemek için

  1. Veri Kaynakları penceresinde Suppliers tablosunu genişletin.

  2. CompanyName düğümü üzerindeki açılır oku ve ardından ComboBox'ı seçin.

  3. Veri Kaynakları penceresinden CompanyName'i eylemler bölmesi denetimine sürükleyin.

    ComboBox denetimi, eylemler bölmesi denetiminin alt öğesi olarak oluşturulur. Aynı anda, BindingSource isimli bir SuppliersBindingSource, bir tablo bağdaştırıcısı ve bir DataSet bileşen alanındaki projeye eklenir.

  4. Bileşenler alanındaki SuppliersBindingNavigator'ı seçin ve DELETE'e basın. Bu anlatımda SuppliersBindingNavigator kullanmayacaksınız.

    Not

    SuppliersBindingNavigator'ı silmek, bunun için yaratılmış tüm kodu kaldırmaz. Bu kodu kaldırabilirsiniz.

  5. Birleşik giriş kutusu, etiket ve Değiştir altında olacak şekilde hareket boyutu özelliğine 171, 21.

  6. Veri Kaynakları penceresinde, Suppliers tablosunun çocuğu olan Products tablosunu genişletin.

  7. ProductName düğümü üzerindeki açılır oku ve ardından ListBox'ı seçin.

  8. ProductName'i eylemler bölmesi denetimine sürükleyin.

    ListBoxdenetimi, eylemler bölmesi denetiminin alt öğesi olarak oluşturulur. Aynı anda, BindingSource isimli bir ProductBindingSource ve bir tablo bağdaştırıcısı bir bileşen alanındaki projeye eklenir.

  9. Liste kutusu, etiket ve Değiştir altında olacak şekilde hareket boyutu 171,95 özelliği.

  10. Araç Kutusu'ndan Button'ı eylemler bölmesi denetimine sürükleyin ve liste kutunun aşağısına koyun.

  11. Button'ı sağ tıklatın, kısayol menüsündeki Özellikler'i tıklatın ve aşağıdaki özellikleri değiştirin.

    Özellik

    Value

    Name

    Ekle

    Metin

    Ekle

  12. Kullanıcı denetimini açılır kutuya uyması için yeniden boyutlandırın.

Veri Kaynağı Kurma

Veri kaynağını kurmak için, denetimi DataTable'daki veriyle doldurmak amacıyla eylemler bölmesi denetiminin Load olayına kod ekleyin ve her denetimin DataSource ve DataMember özelliklerini ayarlayın.

Denetimi veriyle yüklemek için

  1. ActionsControl sınıfının Load olay işleyicisinde aşağıdaki kodu ekleyin.

    Private Sub ActionsControl_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
        Handles Me.Load
    
        Me.SuppliersTableAdapter.Fill(Me.NorthwindDataSet.Suppliers)
        Me.ProductsTableAdapter.Fill(Me.NorthwindDataSet.Products)
    End Sub
    
    private void ActionsControl_Load(object sender, EventArgs e)
    {
        this.suppliersTableAdapter.Fill(this.northwindDataSet.Suppliers);
        this.productsTableAdapter.Fill(this.northwindDataSet.Products);
    }
    
  2. C#'ta, olay işleyicisini Load olayına iliştirmelisiniz. Bu kodu InitializeComponent'ı çağırdıktan sonra ActionsControl yapıcısına yerleştirin. Olay işleyicisi oluşturma hakkında daha fazla bilgi için, bkz. Nasıl Yapılır: Office Projelerinde Olay İşleyicileri Oluşturma

    this.Load += new EventHandler(ActionsControl_Load);
    

Denetimlerin veri bağlama özelliklerini ayarlamak için

  1. CompanyNameComboBox denetimini seçin.

  2. Özellikler penceresinde, DataSource özelliğinin sağındaki düğmeyi tıklatın ve suppliersBindingSource'u seçin.

  3. DisplayMember özelliğinin sağındaki düğmeyi tıklatın ve CompanyName'i seçin.

  4. DataBindings özelliğini genişletin, Metin özelliğinin sağındaki düğmeyi tıkletın ve Hiçbiri'ni seçin.

  5. ProductNameListBox denetimini seçin.

  6. Özellikler penceresinde, DataSource özelliğinin sağındaki düğmeyi tıklatın ve productsBindingSource'u seçin.

  7. DisplayMember özelliğinin sağındaki düğmeyi tıklatın ve ProductName'i seçin.

  8. DataBindings özelliğini genişletin, SelectedValue özelliğinin sağındaki düğmeyi tıklatın ve Hiçbiri'ni seçin.

Tablo İçine Veri Eklemek İçin Yöntem Ekleme

Sonraki görev, ilişkili denetimlerden veriyi okumak ve Word belgenizdeki tabloyu doldurmaktır. İlk olarak, tablodaki başlıkları biçimlendirmek için bir yordam oluşturmak ve sonra Word tablosunu oluşturmak ve biçimlendirmek için AddData yöntemini eklemektir.

Tablo başlıklarını biçimlendirmek için

  • ActionsControl sınıfında, tablonun başlıklarını biçimlendirmek için bir yöntem oluşturun.

    Shared Sub SetHeadings(ByVal tblCell As Word.Cell, ByVal text As String)
    
        With tblCell.Range
            .Text = text
            .Font.Bold = True
            .ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter
        End With
    End Sub
    
    static void SetHeadings(Microsoft.Office.Interop.Word.Cell tblCell, string text)
    {
        tblCell.Range.Text = text;
        tblCell.Range.Font.Bold = 1;
        tblCell.Range.ParagraphFormat.Alignment = 
            Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
    }
    

Tablo oluşturmak için

  • ActionsControl sınıfında, eğer tablo yoksa bir tnae oluşturacak bir yöntem yazın ve eylemler bölmesinden veriyi tabloya ekleyin.

    Private Sub AddData(ByVal row As System.Data.DataRow, ByVal companyName As String)
    
        ' Create a table if it doesn't already exist.
        If Globals.ThisDocument.Tables.Count = 0 Then
    
            Try
                ' Create a table. 
                Dim tbl As Word.Table = Globals.ThisDocument.Tables.Add( _
                    Globals.ThisDocument.Application.Selection.Range, 1, 4)
    
                ' Insert headings.
                SetHeadings(tbl.Cell(1, 1), "Company Name")
                SetHeadings(tbl.Cell(1, 2), "Product Name")
                SetHeadings(tbl.Cell(1, 3), "Quantity")
                SetHeadings(tbl.Cell(1, 4), "Unit Price")
    
            Catch ex As Exception
                MessageBox.Show("Problem creating Products table: " & ex.Message, _
                    "Actions Pane", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
        End If
    
        ' Add data from data row to the table.
        Dim selection As Word.Selection = Globals.ThisDocument.Application.Selection
    
        If selection.Tables.Count > 0 Then
    
            Dim newRow As Word.Row = Globals.ThisDocument.Tables(1).Rows.Add()
            With newRow
                .Range.Font.Bold = False
                .Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft
                .Cells(4).Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight
                .Cells(1).Range.Text = companyName
                .Cells(2).Range.Text = row.Item("ProductName").ToString
                .Cells(3).Range.Text = row.Item("QuantityPerUnit").ToString
                .Cells(4).Range.Text = Math.Round(row.Item("UnitPrice"), 2)
            End With
    
        Else
            MessageBox.Show("Cursor must be within a table.", _
                "Actions Pane", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End If
    End Sub
    
    private void AddData(System.Data.DataRow row, string companyName)
    {
        object missing = System.Type.Missing;
    
        // Create a table if it doesn't already exist.
        if (Globals.ThisDocument.Tables.Count == 0)
        {
            try
            {
                // Create a table.
                Microsoft.Office.Interop.Word.Table tbl = Globals.ThisDocument.Tables.Add
                    (Globals.ThisDocument.Application.Selection.Range, 1, 4, ref missing, ref missing);
    
                // Insert headings.
                SetHeadings(tbl.Cell(1, 1), "Company Name");
                SetHeadings(tbl.Cell(1, 2), "Product Name");
                SetHeadings(tbl.Cell(1, 3), "Quantity");
                SetHeadings(tbl.Cell(1, 4), "Unit Price");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Problem creating Products table: " + ex.Message, 
                    "Actions Pane", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    
        // Add data from data row to the table.
        Microsoft.Office.Interop.Word.Selection selection = Globals.ThisDocument.Application.Selection;
    
        if (selection.Tables.Count > 0)
        {
            Microsoft.Office.Interop.Word.Row newRow = Globals.ThisDocument.Tables[1].Rows.Add(ref missing);
    
            newRow.Range.Font.Bold = 0;
    
            newRow.Range.ParagraphFormat.Alignment = 
                Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphLeft;
    
            newRow.Cells[4].Range.ParagraphFormat.Alignment =
                Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphRight;
    
            newRow.Cells[1].Range.Text = companyName;
            newRow.Cells[2].Range.Text = row["ProductName"].ToString();
            newRow.Cells[3].Range.Text = row["QuantityPerUnit"].ToString();
            newRow.Cells[4].Range.Text = Math.Round(Convert.ToDouble(row["UnitPrice"])).ToString("#,##0.00");
        }
        else
        {
            MessageBox.Show("Cursor must be within a table.", 
                "Actions Pane", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
    

Word tablosuna metin eklemek için

  1. Ekle düğmesinin Click olay işleyicisine aşağıdaki kodu ekleyin.

    Private Sub Insert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Insert.Click
    
        Dim tbl As System.Data.DataTable = NorthwindDataSet.Products
        Dim rows() As System.Data.DataRow
    
        ' Check if a product is selected.
        If Not Me.ProductNameListBox.SelectedIndex < 0 Then
    
            Dim product As String = Me.ProductNameListBox.SelectedItem.Row.Item("ProductName")
            Dim company As String = Me.CompanyNameComboBox.Text
    
            ' Return the data row from the selected Product in the list box.
            rows = tbl.Select("[ProductName] = '" & product.Replace("'", "''") & "'")
    
            AddData(rows(0), company)
    
        Else
            MessageBox.Show("Please select a product.", "Actions Pane", MessageBoxButtons.OK)
        End If
    End Sub
    
    private void Insert_Click(object sender, System.EventArgs e)
    {
        System.Data.DataTable tbl = northwindDataSet.Products;
        System.Data.DataRow[] rows;
    
        // Check if a product is selected.
        if (this.productNameListBox.SelectedIndex >= 0)
        {
            System.Data.DataRowView productRow = (System.Data.DataRowView)this.productNameListBox.SelectedItem;
    
            string product = productRow.Row["ProductName"].ToString();
            string company = this.companyNameComboBox.Text;
    
            // Return the data row from the selected product.
            rows = tbl.Select("[ProductName] = '" + product.Replace("'", "''") + "'");
    
            this.AddData(rows[0], company);
        }
        else
        {
            MessageBox.Show("Please select a product.", "Actions Pane", MessageBoxButtons.OK);
        }
    }
    
  2. C#'ta, düğmenin Click olayına bir olay işleyicisi oluşturmalısınız. ActionsControl sınıfındaki Load olay işleyicisine bu kodu koyabilirsiniz.

    this.Insert.Click += new EventHandler(Insert_Click);
    

Eylemler Bölmesini Gösterme

Eylemler bölmesi, denetimler ona eklendikten sonra görünür olur.

Eylemler bölmesini göstermek için

  1. Çözüm Gezgini'nde ThisDocumen.cs veya ThisDocument.vb'ye sağ tıklatın ve sonra kısayol menüsü üzerindeki Kodu Göster'i tıklatın.

  2. Denetimin yeni bir örneğini, aşağıdaki örnek gibi görünmesi için ThisDocument sınıfının başında oluşturun.

    Dim actions As New ActionsControl
    
    private ActionsControl actions = new ActionsControl();
    
  3. Aşağıdak kod örneğine benzemesi için kodu ThisDocument'ın Startup olay işleyicisine ekleyin.

    Me.ActionsPane.Controls.Add(actions)
    
    this.ActionsPane.Controls.Add(actions);
    

Uygulamayı Test Etme

Belge açıldığında eylemler bölmesinin göründüğünü doğrulamak için belgenizi artık sınayabilirsiniz. Eylemler bölmesinin üzerindeki denetimlerde master/detail ilişkisini sınayın ve Ekle düğmesi tıklatıldığında Word tablosundaki verinin doldurulduğuna emin olun.

Belgenizi sınamak için

  1. F5 tuşuna basarak projeyi çalıştırın.

  2. Eylemler bölmesinin görünür olduğunu doğrulayın.

  3. Açılan kutuda şirketi seçin ve Products liste kutusundaki öğelerin değiştiğini doğrulayın.

  4. Ürünü seçin, eylemler bölmesindeki Ekle'yi tıklatın ve ürün detaylarının Word tablosuna eklendiğini doğrulayın.

  5. Çeşitli şirketlerden ek ürünler ekleyin.

Sonraki Adımlar

Bu anlatımda Word'deki eylemler bölmesi üzerndeki denetimlere veri bağlamanın temelleri gösterilmektedir. Sonradan gelebilecek bazı görevler:

Ayrıca bkz.

Görevler

Nasıl Yapılır: Word Belgelerine Eylemler Bölmesi Ekleme

Diğer Kaynaklar

Eylemler Bölmesine Genel Bakış

Office Çözümlerinde Veriyi Denetime Bağlama