Live Chat Software
Emre CIRIK | Devex XtraGrid Master Detail Views Samples

Devex XtraGrid Master Detail Views Samples

by EMRCRK 26. December 2012 21:32

Tekrar Merhabalar , devex XtraGrid ile master detail bir görüntüyü nasıl elde edersiniz size bunu anlatacağım. Şimdi ilk olarak basit bir veritabanı hazırlayalım. 

1.Olarak PERSONS isimli bir tablomuz olsun

Alanları ID,NAME,SURNAME,AGE olsun

2.Olarak NIDNUMBERS isimli bir tablo olsun 

Alanları ID,NIDNUMBER olsun.

Bu iki tablo arasında ki ilişkilerimiz ID-ID olacaktır.

 

 

void LoadTable() //Tabloları dolduran ve ilişkilendiren metodumuz.
        {
            dtPersons.Clear(); //Kişilrin olduğu table'ı temizliyoruz.
            cmd = new OleDbCommand("SELECT * FROM PERSONS", conn); //Bilgileri dolduruyoruz.
            da.SelectCommand = cmd;
            da.Fill(dtPersons);

            cmd = new OleDbCommand("SELECT * FROM NIDNUMBERS", conn);
            da.SelectCommand = cmd;
            da.Fill(dtNationalIDNumbers);

            DataSet dsRel = new DataSet();//DataSet içerisine bu 2 tabloyu ekliyoruz
            dsRel.Tables.Add(dtPersons);
            dsRel.Tables.Add(dtNationalIDNumbers);

            dsRel.Relations.Add("PersDetail", dtPersons.Columns["ID"], dtNationalIDNumbers.Columns["ID"]);//Tablolar arasında ilişkimizi oluşturuyoruz.

            gridControl1.LevelTree.Nodes.Add(dsRel.Relations["PersDetail"].RelationName, gridView2);//GridControl'e bu ilişkileri belirtip detail view 'ı chlid olarak atıyoruz.
            
            gridControl1.DataSource = dsRel.Tables["PERSONS"];//Persons tablosunu master olarak belirliyoruz.
            gridControl1.Refresh();
            gridControl1.RefreshDataSource();
        }

 

İkinci olarak genellikle kullanıcılar Detail View üzerinde var olan bir alana ait bilgileri alamamaktadır. Bunla ilgili olarakda şu işlem yapılmalıdır :

GridView 2 olarak tanımlanan Detail View 'ın Click Eventi içerisinde 

private void gridView2_Click(object sender, EventArgs e)
        {

            DevExpress.XtraGrid.Views.Grid.GridView a = (DevExpress.XtraGrid.Views.Grid.GridView)sender; // Bir GridView nesnesi oluşturup bunu sender ile hangi view'dan geldiğini alıyoruz.
            if (a.FocusedRowHandle > -1) //Seçilen grid'e ait bir satır varsa bunu focusedRpwNIdNumber olarak tanımlanan değişkene istediğimiz değerleri alıyoruz.
            {
                //MessageBox.Show(a.FocusedRowHandle.ToString());
                focusedRowNIdNumber = a.GetFocusedRowCellValue("NIDNUMBER").ToString();
            }
        }

 

 

private void button1_Click(object sender, EventArgs e)//Daha sonra buton Click eventi içerisinde değerimizi gösteriyoruz.
        {
            MessageBox.Show(focusedRowNIdNumber);
        }

 

 

Üçüncü olarak Grid View üzerinden kayıt ekleme işlemlerinden bahsediyim 

 

private void gridView1_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e) // GridÜzerine yeni bir satır eklenecek ise kullanılan metot
        {           
            addRow = true;
            try
            {           
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@NAME", "").OleDbType = OleDbType.VarChar;
                cmd.Parameters.AddWithValue("@SURNAME", "").OleDbType = OleDbType.VarChar;
                cmd.Parameters.AddWithValue("@AGE", 0).OleDbType = OleDbType.Numeric;
                cmd.CommandText = "INSERT INTO PERSONS (NAME,SURNAME,AGE) " +
                    "VALUES(@NAME,@SURNAME,@AGE)";
                conn.Open();
                cmd.Connection = conn;
                cmd.ExecuteNonQuery();
                conn.Close();
                LoadTable();
            }
            catch (Exception ex)
            {

            }
            addRow = false;
        }

 

Tabi bu örnekte bu işlem çalışır satırı eklersiniz fakat detail tabloya ilişkili bir kayıt gelmediği için programdan bir hata uyarısı alırsınız :) Ama kayıt etmektedir merak etmeyin.

Satır üzerinde kayıt güncellendiğinde bunu veritabanına yansıtmak için 

 

private void gridView1_RowUpdated(object sender, DevExpress.XtraGrid.Views.Base.RowObjectEventArgs e) // Satır güncellendikten sonra çalışacak eventdir
        {
            //Eğer yeni kayıt eklenmeyecekse ve bir satır seçildiyse aşağıdaki işlemler gerçekleşecektir.
            if (gridView1.FocusedRowHandle>-1 && !addRow)
            {
                try
                {
                    int rowId = int.Parse(gridView1.GetFocusedRowCellValue("ID").ToString());
                    string name = gridView1.GetFocusedRowCellValue("NAME").ToString();
                    string surname = gridView1.GetFocusedRowCellValue("SURNAME").ToString();
                    int age = int.Parse(gridView1.GetFocusedRowCellValue("AGE").ToString());

                    cmd.Parameters.Clear();                    
                    cmd.Parameters.AddWithValue("NAME",name).OleDbType=OleDbType.VarChar;
                    cmd.Parameters.AddWithValue("SURNAME", surname).OleDbType = OleDbType.VarChar;
                    cmd.Parameters.AddWithValue("AGE", age);
                    cmd.CommandText = "UPDATE PERSONS SET NAME=@NAME,SURNAME=@SURNAME,AGE=@AGE WHERE ID="+rowId.ToString() ;
                    conn.Open();
                    cmd.Connection = conn;
                    cmd.ExecuteNonQuery();
                    conn.Close();
                    LoadTable();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message); 
                }
            }
        }

 

Aşağıdan örnek uygulamayı indire bilirsiniz. İyi çalışmalar :)

DevexGridSample.rar (62,32 kb)

Comments (2) -

emre
emre Turkey
8/31/2013 10:20:25 AM #

Teşekkür ederim çok faydası oldu.

Reply

emrcrk
emrcrk Turkey
8/31/2013 11:37:10 AM #

Rica ederim, iyi çalışmalar.

Reply

Add comment




  Country flag
biuquote
  • Comment
  • Preview
Loading






Month List

Calendar

<<  December 2016  >>
MoTuWeThFrSaSu
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

View posts in large calendar