Tuesday, December 8, 2020

 

Infopath Formlarında Dinamik Kontroller Yaratma

Bilindiği üzere InfoPath genişletilebilir biçimlendirme dili (Extensible Markup Language - XML) temel alır. Kullanıcı InfoPath'de bir formu doldurduğunda, bu forma ait veriler XML standartlarında kaydedilir .

Örneğin bir textbox kontrolünün XML yapısı

MainDataSource.CreateNavigator().SelectSingleNode("/my:alanlarım/my:field1", NamespaceManager).Value;

Infopath formlarında kullanılan kontroller XML yapısını kullandıkları için nesne olarak değil veri olarak erişebilinirler, dolaysıyla dinamik olarak aşağıdaki gibi yaratılınamazlar.

            TextBox txt = new TextBox();

            txt.Name = "txtasdsoyad";

            txt.Text = "Güler ONUK";

Ancak Infopath formlarında ihtiyacımız olan kadar dinamik kontrolleri yaratmayı Repeating Table kullanarak sağlayabiliriz.

Mesela Form yüklenirken 10 tane TextBox kontrolünü dinamik olarak yaratmak istersek yapmamız gereken Repeating Table içine bir TextBox kontrolü eklemek olacaktır.

TextBox kontrolünün adı textyeni

Form Yüklenirken

public void FormEvents_Loading(object sender, LoadingEventArgs e)

        {

            string[] a = new string[10];

                for (int j = 0; j < 10; j++)

                {

                    a[j] ="Güler ONUK";

 

                    string myNamespace = NamespaceManager.LookupNamespace("my");

                    using (XmlWriter writer = MainDataSource.CreateNavigator().SelectSingleNode(

                    "/my:alanlarım/my:group1", NamespaceManager).AppendChild())

                    {

                        writer.WriteStartElement("mytable", myNamespace);

                        writer.WriteElementString("txtyeni", myNamespace, a[j]);

                        writer.WriteEndElement();

                        writer.Close();

                    }

            }

 

        }

Form çalıştırıldığın da 10 tane TextBox kontrolü aşağıdaki gibi yaratılmış olunur.

Resimde görüldüğü gibi form yüklenirken 11 tane TextBox Kontrolü yaratıldı ama 10 tanesinde isim yazıyor.

Bunun sebebi Repeating Table içine koyduğumuz TextBox kontrolünün boş olmasıdır ve Repeating Table da bu kontrol ilk satır olur. Bu boş satırın silinmesi için

DeleteFirstRowRepatingTable() metodu form yüklenirken çağrılır.

  private void DeleteFirstRowRepatingTable()

        {

            XPathNavigator domNav = MainDataSource.CreateNavigator();

            XPathNavigator itemNav = domNav.SelectSingleNode("/my:alanlarım/my:group1/my:mytable[1]", NamespaceManager);

 

            // Delete the row

            if (itemNav != null)

            {

                itemNav.DeleteSelf();

            }

        }

Form yüklenirken

public void FormEvents_Loading(object sender, LoadingEventArgs e)

        {

            string[] a = new string[10];

 

                for (int j = 0; j < 10; j++)

                {

                    a[j] ="Güler ONUK";

 

                    string myNamespace = NamespaceManager.LookupNamespace("my");

                    using (XmlWriter writer = MainDataSource.CreateNavigator().SelectSingleNode(

                    "/my:alanlarım/my:group1", NamespaceManager).AppendChild())

                    {

                        writer.WriteStartElement("mytable", myNamespace);

                        writer.WriteElementString("txtyeni", myNamespace, a[j]);

                        writer.WriteEndElement();

                        writer.Close();

                    }

            }

          

          DeleteFirstRowRepatingTable();

 

        }


Diğer kontrolleri de Repeating Table içinde aynı şekilde yaratabilirsiniz. Hatta Kontrollerde göstermek isteyeceğiniz verileri bir tablodan alabilirsiniz.


SqlDataAdapter da = new SqlDataAdapter("select*from dbo.BGYSKomisyonUyeleri", con);

            DataTable dt = new DataTable();

            da.Fill(dt);

  for (int j = 0; j < dt.Rows.Count; j++)

                {

                    a[j] = dt.Rows[j]["kUserName"].ToString();

 

                    string myNamespace = NamespaceManager.LookupNamespace("my");

                    using (XmlWriter writer = MainDataSource.CreateNavigator().SelectSingleNode(

                    "/my:alanlarım/my:group1", NamespaceManager).AppendChild())

                    {

                        writer.WriteStartElement("mytable", myNamespace);

                        writer.WriteElementString("bgysad", myNamespace, a[j]);

                        writer.WriteElementString("bgysonemder", myNamespace, "a1");

                        writer.WriteEndElement();

                        writer.Close();

                    }

                }

                DeleteFirstRowRepatingTable();


 




No comments:

Post a Comment

Infopath Formlarında Dinamik Kontroller Yaratma

                                  Sharepoint Form Kitaplığında Klasörleme Bir sharepoint Form kitaplığında ki item kayıtlarının fazlalığı ...