Makale Özeti

Visual Studio .NET, her alanda olduğu gibi veriye erişim konusundada bize çok büyük kolaylıklar ve yenilikler sunuyor.

Makale

New Page 1

Datagrid

Visual Studio .NET, her alanda olduğu gibi veriye erişim konusundada bize çok büyük kolaylıklar ve yenilikler sunuyor. Forum sayfasındaki soruların yoğunluğuna bakacak olursak bu alandaki kolaylıklardan en sevilenlerinden birininde Datagrid nesnesi olduğunu kolaylıkla söyleyebiliriz. (Bu arada benim yazmayı düşündüğüm konuyla ilgili yazdığım ilk kelimeden sonra farkında olmadan başka bir konuda yazmaya başlamak gibi bir huyum var. Aslında VS.NET 2003 ile ilgili olacaktı bu yazı. Bir sonraki yazıya artık..) 

Datagrid, veriyi excel benzeri satır ve sütunlardan oluşan bir görünümde sunar. Genel (ve en basit) kullanımı, tek bir kaynaktaki tek bir tablodan alınan verilerin herhangi bir ilişki olmadan sunulmasıdır. Bu durumda veri basitçe exceldeki gibi satır ve sütunlarda görüntülenir. Ancak Datagrid bize çok daha fazlasını sunuyor. Datagrid ile farklı tablolardaki verileri istediğimiz şekilde biçimlendirerek görüntüleyebilir, datagrid aracılığıyla verilerimizde değişiklik yapabiliriz.

Datagrid nesnesine Visual Basic 6.0dan aşina olanlar, .NET ile birlikte gelen Datagrid nesnesinde çok büyük değişiklikler göreceklerdir ki bu değişiklik ve yenilikleri ileriki bölümlerde inceleyeceğiz. Datagrid, bir dataset ile ilişkilendirildiğinde, satır ve sütunlar otomatik * olarak oluşturulur ve hücreler doldurulur. Yine ileriki bölümlerde bunun nasıl yapılacağını, bu yetmez bana diyenler içinse nasıl sütun ekleyebileceğimizi, mevcut bir sütunu nasıl silebileceğimizi, nasıl sıralama yapabileceğimizi ve ihtiyaçlarımız doğrultusunda nasıl biçimlendirme yapabileceğimizi göreceğiz. *

İlk olarak Visual Basic 6.0dan DataGrid kontrolüne aşina olanlar için .NET ile gelen Windows Forms DataGrid kontrolündeki yenilik ve değişiklikleri inceleyelim.

Windows Forms DataGrid Control.. Yenilikler, Değişiklikler..

Bazı özelliklerin, metotların, eventlerin ve sabitlerin (constant) isimlerinde değişiklikler oldu ve bazı durumlarda bunlar, Visual Basic 6.0daki kullanım amaçlarından farklı amaçlar için kullanılıyor. Bu bölümde DataGrid kontrolünün VB 6daki özelliklerini ve VB.NETteki karşılıklarını inceleyeceğiz.

Visual Basic.NET DataGrid kontrolü, tüm işlemlerin veri kaynağı aracılığıyla gerçekleştirilmesinden dolayı data-spesifik metot veya eventlere ihtiyaç duymaz. Bu nedenle veri kaynağı bir kullanıcı arabirimi ile veya kullanıcı arabirimi olmaksızın değiştirilebilir. Aynı zamanda çok sayıda kontrol tek bir veri kaynağına bağlanabilir ve veri kaynağı senkronize olarak kullanılabilir.

DataGird kontrolündeki görüntüleme ve navigasyon özelliklerine (TabAction, EnterAction, AllowArrows, WrapCellPointer ve Scrollable gibi) artık ihtiyacımız yok. Örneğin, Scrollable özeliği gibi grid fonksiyonları true olarak gelir. Eğer görüntülenebilecek olandan daha çok veri mevcut ise otomatik olarak bir scrollbar ekrana gelir. Excel style navigasyon varsayılandır ve kullanıcı TAB tuşu ile ileri, SHIFT+TAB tuş kombinasyonu ile geriye gidebilir. 

Şimdi özelliklerdeki yenilik ve değişikliklerin bir listesini görelim..

Visual Basic 6.0 Visual Basic .NET Karşılığı
AddNewMode Karşılığı yok.
Align Dock ve Anchor
AllowAddNew DataView nesnesinde; DataView sınıfının AllowNew özelliği ile ulaşılır.
AllowArrows Artık ayarlanabilir bir özellik değil. Arrow Navigationa artık her zaman izin veriliyor.
AllowDelete DataView nesnesinde; DataView sınıfının AllowDelete özelliği ile ulaşılır.
AllowRowSizing Artık ayarlanabilir bir özellik değil. Row Sizinge artık her zaman izin veriliyor.
AllowUpdate DataView nesnesinde; DataView nesnesinin AllowEdit özelliği ile ulaşılır.
Appearance BorderStyle
ApproxCount BindingManagerBase nesnesinde,BindingContext nesnesi ile geri döner; BindingManagerBase sınıfının Count özelliği ile ulaşılır.
BackColor BackColor sadece odd-numbered satırları etkiler; AlternatingBackColor sadece even-numbered satırları etkiler.
Bookmark Artık herhangi bir iteme doğrudan erişebilirsiniz.
Caption CaptionText
CausesValidation CausesValidation
Col DataGridCell yapısında DataGrid.CurrentCell.ColumnNumber ile ulaşılır.
ColumnHeaders ColumnHeadersVisible
RowHeadersVisible
Columns DataGridTableStyle nesnesinde DataGrid.TableStyle.GridColumnStyles ile ulaşılır.
Container Parent; Control dan kalıtım. 
CurrentCellModified DataRow nesnesindeki RowState özelliği.
CurrentCellVisible Eğer CurrentCell özellikleri visible olmayan bir hücreye göre atanmışsa, grid, bu hücreyi görüntülemek için scroll yapacaktır. (CurrentCellVisible = true gibi).
DataBindings DataBindings
DataChanged DataTable nesnesinde; DataTable sınıfının GetChanges metotu ile ulaşılır.
DataFormats DataGridTextBoxColumn nesnesindeki Format özelliği.
DataMember DataMember
DataSource DataSource
DefColWidth PreferredColumnWidth
EditActive Karşılığı yok.
Enabled Enabled
ErrorText DataRow nesnesinde DataRow sınıfının RowError özelliği ile ulaşılır.
FirstRow BindingManagerBase nesnesinin Position özelliğini 0 olarak belirtin. 
Font Font
ForeColor ForeColor
HeadFont HeaderFont
HeadLines Karşılığı yok.
Height Height, Control sınıfından kalıtım.
HelpContextID HelpProvider extender kontrolünde HelpProvider kontrolünün SetHelpKeyword metotu ile ulaşılır.
hWnd Handle
hWndEditor Karşılığı yok.
Index Karşılığı yok.
Left Left
LeftCol Karşılığı yok.
MarqueeStyle Seçilen hücre highlight olur. *
Name Run time esnasında kullanılamaz.
Object Karşılığı yok.
Parent Parent, Control sınıfından kalıtım.
RecordSelectors RowHeadersVisible
RightToLeft RightToLeft
Row DataGridCell yapısında DataGrid.CurrentCell.RowNumber ile ulaşılır.
RowDividerStyle GridLineStyle
RowHeight Karşılığı yok.
ScrollBars Artık ayarlanabilir bir özellik değildir. Varsayılan olarak ScrollBars = true gelir. 
SelBookmarks Karşılığı yok.
SelEndCol Karşılığı yok.
SelLength Karşılığı yok.
SelStart Karşılığı yok.
SelStartCol Karşılığı yok.
SelText Karşılığı yok.
Split Karşılığı yok.
Splits Karşılığı yok.
TabAcrossSplits Karşılığı yok.
TabAction Artık ayarlanabilir bir özellik değildir. Varsayılan fonksiyonu TAB tuşuna basıldığında focusu bir sonraki sütuna taşımaktır. (dbgColumnNavigation). Focusu formdaki bir sonraki kontrole CTRL+TAB tuş kombinasyonu ile taşıyabilirsiniz.(dbgControlNavigation
TabIndex TabIndex
TabStop TabStop
Tag Karşılığı yok.
Text Item, aktif hücre için tanımlandığında. Örneğin:
Dim SelectedCellText As String = DataGrid1.Item(DataGrid1.CurrentCell)
ToolTipText On ToolTip extender control; accessed by SetToolTip method of ToolTip control
Top Top
Visible Visible
VisibleCols VisibleColumnCount
VisibleRows VisibleRowCount
WhatsThisHelpID On HelpProvider extender control; accessed by SetHelpString method of HelpProvider control
Width Width, Control sınıfından kalıtım.
WrapCellPointer Artık ayarlanabilir bir özellik değildir.Varsayılan fonksiyonu WrapCellPointer = true.

Datagrid kontrolünü kullanabilmek için, bu kontrole bir veri kaynağı belirtmemiz gerekiyor. Bu işlemi "datasource" ve "datamember" özellikleri ile tasarım aşamasında "design time" veya runtime esnasında "setdatabinding" metotunu kullanarak yapıyoruz. Peki ama bunu nasıl yapıyoruz?..

Datagrid Kontrolünün Bir Veri Kaynağına Bağlanması

DataGrid kontrolü için kullanabileceğimiz 4 adet veri kaynağı var. Bunlar "Datatable", "DataSet", "DataView" ve "DataViewManager" sınıflarıdır. 

Eğer kaynağınız bir dataset ise, bu formunuz üzerinde bir nesne veya bir XML Web Servisinden alınmış bir nesne olabilir. Bağlama işlemini typed veya untyped datasetler ile yapabilirsiniz. Dataset oluşturma konusunu bu yazıda ele almayacağız. 

Bir DataGrid kontrolünü aynı zamanda ilave yapılarada bağlayabilirsiniz ancak bunun için bu yapının public özellikler sunması (örneğin bir dizinin elemanları gibi) gerekmekte. Grid, yapıdaki tüm unsurların public özelliklerini görüntüleyecektir. Örnek olarak DataGrid kontrolünü müşteri nesnelerinin bir dizisine bağlarsanız, grid bu müşteri nesnelerinin tüm public özelliklerini görüntüleyecektir. Integerlerden oluşan bir diziyi bağlamanız gibi bazı durumlarda işlem başarısız olabilir. Integer örneğinin çalışmamasının nedeni, Integer veri türünün herhangi bir public özellik desteklememesidir. Bu nedenle grid herhangi bir veri görüntüleyemeyecektir.

Unsurlarının bir public özellik sunmaları durumunda aşağıdaki yapıları kullanabilirsiniz:
   *  IList arabirimini sağlayan herhangi bir bileşen. Bu tek boyutlu dizileri de içerir.
   *  IListSource arabirimini sağlayan herhangi bir bileşen.
   *  IBindingList arabirimini sağlayan herhangi bir bileşen.

Grid

DataGrid kontrolü genellikle tek bir tablodaki verilerin (bir dataset aracılığıyla) görüntülenmesinde kullanılabilir. Ancak kontrol aynı zamanda birden çok sayıdaki tablodaki verilerin bir arada görüntülenmesi (ilişkisel veritabanlarıda dahil) için kullanılabilir. Gridin görünümü veri kaynağına göre kendiliğinden ayarlanmaktadır.

Tek Tablo: Tablo bir grid ile görüntülenir.
Birden çok Tablo: Grid bir treeview ile tabloları listeler ve kullanıcı istediği tabloyu bu listeden seçerek görüntüleyebilir.
Birden çok ilişkisel Tablo: Grid bir treeview ile tabloları listeleyebilir böylelikle kullanıcı istediği tabloyı bu listeden seçerek görüntüleyebilir veya  gridin görüntüleyeceği parent tabloyu belirtebilirsiniz. Parent tablodaki kayıtlar kullanıcıya ilişkili child diziler içinde gezinme imkanı verir. Bu konuyu daha detaylı bir şekilde ileriki bölümlerde inceleyeceğiz.

Verinin Gride Bağlanması 

Eğer uygulamamızın tasarım aşamasında veri kaynağı erişilebilir durumdaysa (örneğin form üzerinde bir dataset veya data view varsa) veri kaynağını DataGride tasarım aşamasında bağlayabilirsiniz. Bir diğer alternatif olarak veri bağlama işlemini çalışma zamanında gerçekleştirebilirsiniz. Bu seçenek, runtime esnasında edindiğiniz bazı bilgilere göre bir veri kaynağı kullanacağınız durumlar için oldukça kullanışlıdır. Örnek olarak kullanıcının belirttiği bazı bilgilere (mesela kullanıcı adı/parola) göre bir tablo görüntülemek isteyebiliriz. Veri kaynağının tasarım aşamasında erişilebilir olmadığı durumlarda da bu seçeneği kullanmamız gerekiyor. 

Tasarım aşamasında DataGrid kontolüne veri bağlamak için...
1. Kontrolün "DataSource" özelliğini bağlamak istediğiniz veriyi içeren nesneyi seçerek değiştirin.
2. Eğer veri kaynağı dataset ise, "DataMember" özelliğini, bağlamak istediğiniz tablonun adıyla değiştirin.
3. Eğer veri kaynağı dataset veya bir dataset tablosuna dayanan data view ise dataset için gerekli kodu forma ekleyin. Eğer dataset doğrudan bir veritabanından populate ediliyorsa, basitçe data adapter ın Fill metotunu kullanabilirsiniz. Örnek olarak YazGelistirUsers adlı bir dataseti populate eden bir data adapter için gerekli kodu yazalım;

VB:   sqlDataAdapter1.Fill(YazGelistirUsers)
C#:  
sqlDataAdapter1.Fill(YazGelistirUsers);
C++:
sqlDataAdapter1->Fill(YazGelistirUsers);

Eğer dataset bir XML Web Servisi aracılığıyla dolduruluyorsa,servisin bir örneğini oluşturarak (dataset oluşturmak için) metotlarından birini çağırıyoruz. Daha sonra XML Web Servisinden gelen dataset ile local datasetimizi birleştiriyoruz. Aşağıdaki örnek bunu nasıl yapabileceğimizi gösteriyor.

YazGelistirUsers adlı web servisimizin GetUsers metotunu kullanacağız ve elde ettiğimiz dataseti, local datasetimiz olan YazGelistirUsers1 ile birleştireceğiz.

Visual Basic 
Dim ws as New MyProject.localhost.YazGelistirUsers()
ws.Credentials = System.Net.CredentialCache.DefaultCredentials
YazGelistirUsers1.Merge(ws.GetUsers())

C#
MyProject.localhost.YazGelistirUsers ws = new MyProject.localhost.YazGelistirUsers();
ws.Credentials = System.Net.CredentialsCache.DefaultCredentials;
YazGelistirUsers1.Merge(ws.GetUsers());

C++
MyProject::localhost::YazGelistirUsers* ws =
   new MyProject::localhost::YazGelistirUsers();
ws->Credentials = System::Net::CredentialCache::DefaultCredentials;
YazGelistirUsers1->Merge(ws->GetUsers());

4. İsteğinize bağlı olarak uygun tablo stillerini ve sütun stillerini gride ekleyebilirsiniz. Eğer herhangi bir tablo stili belirtmezseniz, tablo standart biçimlendirme ile görüntülenir ve tüm sütunlar görünür halde olur.

DataGride programatik olarak veri bağlamak için...

1. Dataseti doldurmak için gerekli kodu yazın. *  
2. DataGrid kontrolünün "SetDataBinding" metotunu, bir veri kaynağı ve tablo adı belirterek çağırın. Eğer bir data member belirtmeniz gerekmiyorsa boş bir string gönderebilirsiniz. Eğer gride ilk kez veri bağlıyorsanız, kontrolün "DataSource"
ve "DataMember" özelliklerini belirtebilirsiniz ancak bu özellikleri bir kez tanımladıktan sonra değiştiremezsiniz. Bu nedenle her zaman SetDataBinding metotunu kullanmanız önerilir. Aşağıdaki örnek, ygusers tablosunun yazgelistirusers1 adlı bir datasete programatik olarak nasıl bağlanabileceğini gösteriyor.

VB:    DataGrid1.SetDataBinding(YazGelistirUsers1, "ygusers")
C#:  
DataGrid1.SetDataBinding(YazGelistirUsers1, "ygusers");
C++: 
DataGrid1->SetDataBinding(YazGelistirUsers, S"ygusers");

Eğer ygusers tablosu datasetteki tek tablo ise, veriyi şu şekilde de bağlayabilirsiniz;

VB:    DataGrid1.SetDataBinding(YazGelistirUsers1, "")
C#:  
DataGrid1.SetDataBinding(YazGelistirUsers1, "");
C++: 
DataGrid1->SetDataBinding(YazGelistirUsers, S"");

3. İsteğinize bağlı olarak uygun tablo stillerini ve sütun stillerini gride ekleyebilirsiniz. Eğer herhangi bir tablo stili belirtmezseniz, tablo standart biçimlendirme ile görüntülenir ve tüm sütunlar görünür halde olur.
 

Değişiklikleri, yenilikleri gördük, öğrendik. DataGridi bir veri kaynağına nasıl bağlayacağımızıda gördük. Şimdi bir adım ileri gidelim ve DataGird kontrolüne nasıl tablo ve sütun ekleyebileceğimizi görelim. *

DataGird Kontrolüne Sütun Ve Tabloların Eklenmesi..

Veirleri, DataGrid kontrolünde, DataGird kontrolünün "TableStyles" özelliğinden erişilen, "DataGridTableStyle" nesneleri oluşturarak ve bunları "GridTableStylesCollection" nesnesine ekleyerek tablo ve sütunlar aracılığıyla görüntüleriz. Her tablo "DataGridTableStyle" nesnesinin "MappingName" özelliğinde belirtilen veri tablosunun içeriğini görüntüler. Siz, görüntülenecek sütunları her "DataGridTableStyle" nesnesinin "GridColumnStyles" özelliğinden erişilen "GridColumnStylesCollection" nesnesine "DataGridColumnStyle" nesneleri oluşturarak kısıtlayabilirsiniz. 

Tasarım aşamasında DataGrid kontrolüne tablo eklemek için..
1. İlk olarak DataGrid kontrolünü bir DataSete bağlamamız gerekiyor ki nasıl diyenler yukarıda nasıl olduğunu görebilirler.
2. Properties penceresinden DataGrid kontrolünün TableStyles özelliğini seçin ve sonra DataGridTableStyle Collection Editor ı görüntülemek için ellipsis butonunu tıklayın. (Ellipsis butonu nedir? --> )
3. Cellection Editorde tablo eklemek için "Add" butonunu tıklayın.
4. Collection Editorü kapatmak için "OK" butonunu tıklayın ve "TabStyles" özelliğinin karşısındaki ellipsis butonunu tıklayarak Collection Editorü yeniden açın. Collection Editor yeniden açıldığında kontrole bağlı veri tabloları MappingName özelliğine ait drop-down listede listelenecektir.
5. Collection Editorün "Members" bölümünde "table style" ı tıklayın.
6. Collection Editörün "Properties" bölümünde "MappingName" için istediğiniz tabloyu seçin.

Tasarım aşamasında DataGrid kontrolüne sütun eklemek için..
1. DataGridTableStyle Collection Editorün Members alanında uygun tablo stilini seçin. Özellikler alanında ise GridColumnStyles collectionu seçin ve ellipsis butonunu tıklayarak DataGridColumnStyle Collection Editorü görüntüleyin.
2. Editorde bir sütun stili eklemek için Add butonunu tıklayın veya Add butonunun yanındaki oku tıklayarak bir sütun türü belirtin.
3. Collection Editorü kapatmak için OK butonunu tıklayın ve GridColumnStyles özelliğinin yanındaki ellipsis butonunu tıklayarak tekrar açın. Editor yeniden açıldığında, bağlanmış olan veri tablosundaki sütunlar MappingName özelliğine ait drop-down listede görüntülenecektir.
4. Editorün Members alanında column styleı tıklayın.
5. Collection Editörün "Properties" bölümünde "MappingName" için istediğiniz tabloyu seçin.

DataGride programatik olarak tablo ve sütun eklemek için..
1. Bir tablodaki veriyi görüntülemek için DataGrid kontrolümüzü ilk olarak bir DataSete bağlamamız gerekiyor. Nasıl yapılacağını yukarıda onüçbinüçyüzsekseniki kere anlatmıştık.
2. Yeni bir table style deklare ediyoruz ve table styleın mapping name ini belirliyoruz.

VB
Dim tsl As New DataGridTableStyle()
tsl.MappingName = "YGUSRS"

C#
DataGridTableStyle tsl = new DataGridTableStyle();
tsl.MappingName = "YGUSRS";

C++
DataGridTableStyle* tsl = new DataGridTableStyle();
tsl->MappingName = S"YGUSRS";

3. Yeni bir column style deklare ediyor ve bunun mapping name ve diğer özelliklerini belirliyoruz.

VB
Dim myDataCol As New DataGridBoolColumn()
myDataCol.HeaderText = "Yeni Sütun"
myDataCol.MappingName = "Current"

C#
DataGridBoolColumn myDataCol = new DataGridBoolColumn();
myDataCol.HeaderText = "Yeni Sütun";
myDataCol.MappingName = "Current";

C++
DataGridBoolColumn* myDataCol = new DataGridBoolColumn();
myDataCol->HeaderText = S"Yeni Sütun";
myDataCol->MappingName = S"Current";

4. Yeni sütunumuzu table style a eklemek için GridColumnStylesCollection nesnesinin Add metotunu çağıralım. 

Visual Basic
ts1.GridColumnStyles.Add(myDataCol)

C#
ts1.GridColumnStyles.Add(myDataCol);

C++
ts1->GridColumnStyles->Add(myDataCol);

5. Table styleı gride eklemek için GridTableStylesCollection nesnesinin Add metotunu çağıralım. 

Visual Basic
DataGrid1.TableStyles.Add(ts1)

C#
dataGrid1.TableStyles.Add(ts1);

C++
dataGrid1->TableStyles->Add(ts1);

DataGrid nesnemizi bir veri kaynağına bağladık, tablolar ve sütunlar ekledik. Sıra geldi DataGrid nesnemizi görsel açıdan istediğimiz şekilde biçimlendirmeye..

DataGrid Kontrolünün Biçimlendirilmesi

DataGrid kontrolünün farklı alanlarını farklı renklerle biçimlendirmek bilginin daha kolay okunmasını ve yorumlanmasını sağlar. Satır ve sütunlara renkler uygulayabiliriz. Aynı zamanda satır ve sütunlar sizin isteğiniz doğrultusunda hidden ve visible olabilir.

DataGrid kontrolünün biçimlendirilmesinin üç temel yönü vardır. Verinin görüntüleneceği varsayılan bir stil belirtmek için özellikleri belirleyebilirsiniz. Elbette tablolarımızın görünümünü run-time esnasındada değiştirebiliriz.

DataGrid Kontrolünün Tasarım Aşamasında Biçimlendirilmesi

DataGrid kontrolü için tasarım aşamasında bazı biçimlendirmeler yapabilir, bu biçimlendirmelerde çalışma zamanında görüntülenen sütun ve tablolara göre değişiklikler yapabiliriz. Aşağıdaki tablo, DataGrid kontrolünün biçimlendirmede kullanabileceğimiz özellikleri ve açıklamalarını listeliyor.

Özellik Açıklama
AlternatingBackColor BackColor özelliği grid üzerindeki even-numbered satırlar için kullanılacak arkaplan rengini belirlemek için kullanılır. AlternatingBackColor özelliğini farklı bir renk olarak belirlediğinizde, diğer tüm satırlar bu yeni renge göre düzenlenir. (satır 1, 3, 5, ve diğerlei).
BackColor Grid üzerindeki even-numbered satırların arkaalan rengi (satır 0, 2, 4, 6, ve diğerleri).
BackgroundColor BackColor ve AlternatingBackColor özelliklerini grid üzerindeki satırların arkaalan renklerini belirlemekte kullanıyorduk, BackgroundColor özelliği ile satır olmayan sadece grid en alta scroll yapıldığında veya grid üzerinde çok az sayıda satır olduğu durumlarda görünen alanlarda kullanılacak arkaalan rengini belirliyoruz.
BorderStyle Gridde kullanılacak border rengi.
CaptionBackColor Gridin üzerinde görünen pencere başlığının arkaalan rengi.
CaptionFont Gridin en üstündeki başlıkta kullanılacak font.
CaptionForeColor Gridin en üstündeki başlığın arkaalan rengi.
Font Grid içindeki metinlerin görüntülenmesinde kullanılacak font.
ForeColor Grid içindeki metinlerin görüntülenmesinde kullanılacak fontun rengi.
GridLineColor Data gridin gridlerinin rengi. *
HeaderBackColor Satır ve hücre başlıklarının arkaalan rengi.
HeaderFont Sütun başlıklarında kullanılacak font.
HeaderForeColor Grid üzerindeki sütun başlıklarında kullanılacak foreground rengi.
LinkColor Linklerde kullanılacak renk.
ParentRowsBackColor Bir child tablodaki parent satırların arkaalan rengi.
ParentRowsForeColor Bir child tablodaki parent satırların foreground rengi.
PreferredColumnWidth Grid üzerindeki sütunlar için pixel cinsinden varsayılan genişlik miktarı. Bu özelliği DataSource ve DataMember özelliklerinden önce belirlememeniz durumunda çalışmayacaktır.

Bu özellik için 0 dan küçük bir değer belirtilemez.
PreferredRowHeight Grid üzerindeki satırlar için pixel cinsinden varsayılan yükseklik. 
Bu özelliği DataSource ve DataMember özelliklerinden önce belirlememeniz durumunda çalışmayacaktır.

Bu özellik için 0 dan küçük bir değer belirtilemez.
RowHeaderWidth Griddeki satır başlıklarının genişliği.
SelectionBackColor Bir satır veya hücre seçili durumdayken seçili satır veya hücre için kullanılacak arkaalan rengi.
SelectionForeColor Bir satır veya hücre seçili durumdayken seçili satır veya hücre için kullanılacak foreground rengi.

Bu gibi değişiklikleri yaparken yaptığımız renk seçiminin kullanıcının kontrollere erişmesini zorlaştırabileceğini veya engelleyebileceğini unutmayalım. Programlarımızda varsayılan form arkaalan rengi üzerinde yeşil veya kırmızı labellar vb. eklemeyelim.

Tablo ve Sütun Stilleri

Öncede söylediğimiz gibi DataGrid kontrolünün görünümü üzerinde pek çok değişiklik gerçekleştirebiliyoruz. Bunu "DataGridTableStyles" sınıfı örnekleri üreterek yapıyoruz. Tablo stilleri DataGrid kontrolünün varsayılan biçimlendirmesinden bağımsız olarak tablolarda kullanılacak stilleri belirtir. Her tablo, sadece bir tek tablo stiline sahip olabilir.

Bazı durumlarda bir sütunumuzun diğer sütunlarımızdan farklı bir görünüme sahip olmasını isteyebiliriz. Bunu özelleştirilmiş sütun stilleri üretebilmemize imkan sağlayan "GridColumnStyles" sınıfı ile yapıyoruz.

Sütun stilleri, tablo stillerinin veri tabloları ile ilişkili olduğu gibi dataset içindeki sütunlarla ilişkilidir. Az önce belirttiğimiz gibi her tablo kendisi için tanımlanmış tek bir tablo stiline sahip olabilir. Aynı şekilde her sütunda kendisi için tanımlanmış sadece bir sütun stiline sahip olabilir. (Bu ilişki sütunun "MappingName" özelliği ile sağlanır)

Tasarım aşamasında sütun stili eklemediğiniz bir tablo stili oluşturmadığınızdan emin olun (eğer bunu kasıtlı olarak yapmamışsanız). Bu durumda Visual Studio çalışma zamanında form ve grid oluşturulduğunda varsayılan sütun stillerini ekleyecektir. Bir tablo stili oluşturmanız ve sütun stilleri eklemeniz durumunda Visual Studio herhangi bir sütun stili oluşturmayacaktır ve bu durumda sütun stillerini tanımlamanız ve mapping name ile bunları belirtmeniz gerekir ki grid üzerinde istenilen sütunlar (istenilen şekilde) görülsün.

Aşağıdaki adımlar formunuz üzerinde bir DataGrid kontrolünün olduğu ve bu kontrolün bir Data Table a bağlanmış olduğu varsayılarak tasarım aşamasında bir veri tablosunun tablo ve sütun stillerinin belirlenmesini anlatmaktadır.

Veri Tablolarının tablo ve sütun biçimlerinin tasarım aşamasında belirlenmesi 
1. Form üzerindeki DataGrid kontrolünü seçin.
2. Properties penceresinde TableStyles özelliğini seçin ve ellipsis butonunu tıklayın. *
   Collection Editor açıldığında tablo stilleri ekleyebilir, kaldırabilirsiniz, görünüm özelliklerini belirleyebilirsiniz ve tablo stilleri için mapping name belirtebilirsiniz.
3. Add butonunu kullanarak bir tablo stili ekleyin.
4. MappingName özelliği ile tablo stiliniz için bir mapping name belirtin. Mapping name hangi tablo stilinin hangi tablo için kullanılacağının belirlenmesinde kullanılır.
5. Oluşturduğunuz tablo stillerine sütun stilleri ekleyin. Bunu yapmak için Collection Editorde "GridColumnStyle" özelliğini seçerek ellipsis butonunu tıklayın.
   Collection Editor açıldığında sütun stilleri ekleyebilir, kaldırabilirsiniz, görünüm özelliklerini belirleyebilirsiniz ve veri sütunları için mapping name belirtebilirsiniz. 

Veri Tablolarının tablo ve sütun biçimlerinin programatik olarak belirlenmesi 
1. Yeni bir tablo stili oluşturun ve gerekli özellikleri belirtin.
2. Bir sütun stili oluşturun ve özelliklerini belirtin.
3. Tablo stilinin sütun stili bölümüne sütun stilini ekleyin.
4. Tablo stilini gridin tablo stilleri bölümüne ekleyin.
5. Aşağıdaki örnekte görebileceğiniz gibi, bir DataGridTableStyle örneği oluşturun ve bunun MappingName özelliğini belirtin.
6. Bir GridColumnStyle örneği oluşturun ve bunun MappingName özelliğini belirtin.
7. Oluşturmak istediğiniz her sütun stili için adım 2den 6ya kadar olan bölümü tekrar edin.

Aşağıdaki örnek DataGridTextBoxColumn un nasıl oluşturulduğunu göstermektedir çünkü bir ad, bir sütunda görüntülenmek zorundadır. Ek olarak sütun stilini tablo stilindeki GridColumnStylesCollection bölümüne ekliyor ve tablo stilinide Gridin GridTableStylesCollection bölümüne ekliyoruz.

VB
Private Sub CreateAuthorFirstNameColumn()
Bir GridTableStyle ekleyip MappingName özelliğini 
DataTable ın adı olarak belirtiyoruz

Dim TSYazGelistirUsers As New DataGridTableStyle()
TSYazGelistirUsers.MappingName = "YazGelisyitUsers"


Bir GridColumnStyle ekleyip MappingName 
özelliğini DataTabledaki bir DataColumn 
un adı olarak belirtiyoruz. Headertext ve 
Width özelliklerinide belirtmeden geçmiyoruz.

Dim TCFirstName As New DataGridTextBoxColumn()
TCFirstName.MappingName = "YGXLS"
TCFirstName.HeaderText = "Username"
TCFirstName.Width = 75
TSYazGelistirUsers.GridColumnStyles.Add(TCUserName)

myDataGrid.TableStyles.Add(TSYazGelistirUsers)
End Sub 


C#
private void addCustomDataTableStyle()
{
Bir GridTableStyle ekleyip MappingName özelliğini 
DataTable ın adı olarak belirtiyoruz

DataGridTableStyle TSYazGelistirUsers = new DataGridTableStyle();
TSYazGelistirUsers.MappingName = "YazGelistirUsers";

Bir GridColumnStyle ekleyip MappingName 
özelliğini DataTabledaki bir DataColumn 
un adı olarak belirtiyoruz. 
DataGridColumnStyle TCUserName = new DataGridTextBoxColumn();
TCUserName.MappingName = " YGXLS";
TCUserName.HeaderText = "Username";
TCUserName.Width = 75;
TSYazGelistirUsers.GridColumnStyles.Add(TCUserName);

dataGrid1.TableStyles.Add(TSYazGelistirUsers);
}


C++
private:
void addCustomDataTableStyle()
{
Bir GridTableStyle ekleyip MappingName özelliğini 
DataTable ın adı olarak belirtiyoruz

DataGridTableStyle* TSYazGelistirUsers = new DataGridTableStyle();
TSYazGelistirUsers->MappingName = S"YazGelistirUsers";

Bir GridColumnStyle ekleyip MappingName 
özelliğini DataTabledaki bir DataColumn 
un adı olarak belirtiyoruz. 
DataGridColumnStyle* TCUserName = new DataGridTextBoxColumn();
TCUserName->MappingName = S"YGXLS";
TCUserName->HeaderText = S"Username";
TCUserName->Width = 75;
TSYazGelistirUsers->GridColumnStyles->Add(TCUserName);

dataGrid1->TableStyles->Add(TSYazGelistirUsers);
}

DataGridi nasıl kullanacağımızı, tablo ve sütun eklemeyi, eklediğimiz tablo ve sütunları biçimlendirmeyi gördük. Şimdi her iyi programcı gibi oluşturduğumuz DataGride eklediğimiz ve biçimlendirdiğimiz tablo ve sütunları yanlışlıkla silmemiz gerekiyor. Bu tablo ve sütunları yanlışlıkla silebilmek içinde önce bunları nasıl sileceğimizi bilmemiz gerekiyor.

DataGrid Kontrolündeki Sütunları Silmek..

DataGrid kontrolüne eklediğimiz sütunlarıda daha önceki adımlarda bu sütunları eklerken ve biçimlendirirken yaptığımız gibi iki şekilde silebiliriz. İlki tasarım aşamasında, veri kaynağı ulaşılabilir durumdaysa. Diğeri ise çalışma zamanında programatik olarak. İlk olarak bu işlemi tasarım aşamasında nasıl yapabileceğimizi adım adım inceleyelim.

1. Formumuzun deklarasyonlar bölümünde bir DataDridTableStyle deklare edelim.
2. DataGridTableStyle.MappingName özelliğini veri kaynağındaki tablo şeklinde belirleyelim. 
3. DataGridin tablo stilleri bölümüne yeni bir DataGridTableStyle nesnesi ekleyelim.
4. DataGridin GridColumnStyles kolleksiyonunun RemoveAt metotunu  silinecek sütunun sütun indexini (column index) belirterek çağıralım.

Visual Basic
Formumuzun deklarasyonlar bölümünde yeni bir DataGridTableStyle deklare edelim.

Dim ts As DataGridTableStyle = New DataGridTableStyle()

Sub DeleteColumn()
DataGridTableStyle.MappingName özelliğini veri kaynağındaki hedef tablo şeklinde belirleyelim
ts.MappingName = DataGrid1.DataMember

Bunu datagrid in TableStyles kolleksiyonuna ekleyelim
DataGrid1.TableStyles.Add(ts)

İlk sütunu silelim (index 0)
DataGrid1.TableStyles(0).GridColumnStyles.RemoveAt(0)
End Sub

C#
Formumuzun deklarasyonlar bölümünde yeni bir DataGridTableStyle deklare edelim.
DataGridTableStyle ts = new DataGridTableStyle();

private void deleteColumn()

{
// DataGridTableStyle.MappingName özelliğini veri kaynağındaki hedef tablo şeklinde belirleyelim
ts.MappingName = dataGrid1.DataMember;

// Bunu datagrid in TableStyles kolleksiyonuna ekleyelim
dataGrid1.TableStyles.Add(ts);

// İlk sütunu silelim (index 0)
dataGrid1.TableStyles[0].GridColumnStyles.RemoveAt(0);
}

DataGrid üzerindeki bir sütunu programatik olarak gizlemek
Aslında burada küçük bir hile yapıyoruz diyebiliriz. Yaptığımız tek işlem, görüntülenmemesini istediğimiz sütunun genişliğini (width) 0 yapmak. 

1. Formumuzun deklarasyonlar bölümünde bir DataDridTableStyle deklare edelim.
2. DataGridTableStyle.MappingName özelliğini veri kaynağındaki tablo şeklinde belirleyelim. 
3. DataGridin tablo stilleri bölümüne yeni bir DataGridTableStyle nesnesi ekleyelim.
4. Sütunu Width özelliğini 0 olarak ayarlayarak gizliyoruz.

Visual Basic
Formumuzun deklarasyonlar bölümünde yeni bir DataGridTableStyle deklare edelim.

Dim ts As DataGridTableStyle = New DataGridTableStyle()

Sub HideColumn()
DataGridTableStyle.MappingName özelliğini veri kaynağındaki hedef tablo şeklinde belirleyelim
ts.MappingName = DataGrid1.DataMember

Bunu datagrid in TableStyles kolleksiyonuna ekleyelim
DataGrid1.TableStyles.Add(ts)

İlk sütunu gizleyelim (index 0)
DataGrid1.TableStyles(0).GridColumnStyles(0).Width = 0
End Sub

C#
Formumuzun deklarasyonlar bölümünde yeni bir DataGridTableStyle deklare edelim.
DataGridTableStyle ts = new DataGridTableStyle();

private void hideColumn()
{

// DataGridTableStyle.MappingName özelliğini veri kaynağındaki hedef tablo şeklinde belirleyelim
ts.MappingName = dataGrid1.DataMember;

// Bunu datagrid in TableStyles kolleksiyonuna ekleyelim
dataGrid1.TableStyles.Add(ts);

// İlk sütunu gizleyelim (index 0)
dataGrid1.TableStyles[0].GridColumnStyles[0].Width = 0;
}


Sanırım .NETte DataGrid kontrolü ile ilgili sorulabilecek pek çok soruya yanıt vermiş olduk. Umarım faydalı bir yazı olmuştur.   

Kadir Sümerkent 
E-mail: kadirsumerkent@msn.com
ICQ: 162200997
 

Kaynak: MSDN.