İzlenecek yol: Bağlantısız Bir Windows Forms DataGridView Denetimi Oluşturma
Sık sık bir veritabanından kaynaklanmaz tablosal verileri görüntülemek istiyor olabilir. Örneğin, iki boyutlu bir dize dizisinin içeriğini göstermek istiyor olabilir. sınıfı, DataGridView bir veri kaynağına bağlamadan verileri görüntülemek için kolay ve yüksek oranda özelleştirilebilir bir yol sağlar. Bu kılavuzda bir denetimin nasıl doldurmak ve satır ekleme ve silme işlemlerini DataGridView "sınırsız" modda yönetme işlemi açıklanır. Varsayılan olarak, kullanıcı yeni satırlar ekleyebilir. Satır eklemesini önlemek için özelliğini AllowUserToAddRows olarak false ayarlayın.
Bu konudaki kodu tek bir liste olarak kopyalamak için bkz. Nasıl kullanılır: Forms DataGridView Denetimi WindowsSınırsız Bağlantı Oluşturma.
Form Oluşturma
Bir sınırsız DataGridView denetimi kullanmak için
'den türeten ve aşağıdaki Form değişken bildirimlerini ve yöntemini içeren bir sınıf
Mainoluşturun.using System; using System.Drawing; using System.Windows.Forms; public class Form1 : System.Windows.Forms.Form { private Panel buttonPanel = new Panel(); private DataGridView songsDataGridView = new DataGridView(); private Button addNewRowButton = new Button(); private Button deleteRowButton = new Button();Imports System.Drawing Imports System.Windows.Forms Public Class Form1 Inherits System.Windows.Forms.Form Private buttonPanel As New Panel Private WithEvents songsDataGridView As New DataGridView Private WithEvents addNewRowButton As New Button Private WithEvents deleteRowButton As New Button[STAThreadAttribute()] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } }<STAThreadAttribute()> _ Public Shared Sub Main() Application.EnableVisualStyles() Application.Run(New Form1()) End Sub End ClassFormun
SetupLayoutdüzenini ayarlamak için form sınıf tanımına bir yöntem uygulama.private void SetupLayout() { this.Size = new Size(600, 500); addNewRowButton.Text = "Add Row"; addNewRowButton.Location = new Point(10, 10); addNewRowButton.Click += new EventHandler(addNewRowButton_Click); deleteRowButton.Text = "Delete Row"; deleteRowButton.Location = new Point(100, 10); deleteRowButton.Click += new EventHandler(deleteRowButton_Click); buttonPanel.Controls.Add(addNewRowButton); buttonPanel.Controls.Add(deleteRowButton); buttonPanel.Height = 50; buttonPanel.Dock = DockStyle.Bottom; this.Controls.Add(this.buttonPanel); }Private Sub SetupLayout() Me.Size = New Size(600, 500) With addNewRowButton .Text = "Add Row" .Location = New Point(10, 10) End With With deleteRowButton .Text = "Delete Row" .Location = New Point(100, 10) End With With buttonPanel .Controls.Add(addNewRowButton) .Controls.Add(deleteRowButton) .Height = 50 .Dock = DockStyle.Bottom End With Me.Controls.Add(Me.buttonPanel) End SubSütunları
SetupDataGridViewve özellikleri ayarlamak için DataGridView bir yöntem oluşturun.Bu yöntem önce DataGridView denetimi formun koleksiyonuna Controls ekler. Ardından, görüntülenecek sütun sayısı özelliği kullanılarak ColumnCount ayarlanır. Sütun üst bilgileri için varsayılan stil, özelliği tarafından döndürülen BackColor ForeColor , ve özellikleri Font DataGridViewCellStyle ColumnHeadersDefaultCellStyle ayarlanır.
Düzen ve görünüm özellikleri ayarlanır ve ardından sütun adları atanır. Bu yöntemden DataGridView çıkılıyorsa denetim doldurulmaya hazırdır.
private void SetupDataGridView() { this.Controls.Add(songsDataGridView); songsDataGridView.ColumnCount = 5; songsDataGridView.ColumnHeadersDefaultCellStyle.BackColor = Color.Navy; songsDataGridView.ColumnHeadersDefaultCellStyle.ForeColor = Color.White; songsDataGridView.ColumnHeadersDefaultCellStyle.Font = new Font(songsDataGridView.Font, FontStyle.Bold); songsDataGridView.Name = "songsDataGridView"; songsDataGridView.Location = new Point(8, 8); songsDataGridView.Size = new Size(500, 250); songsDataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders; songsDataGridView.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single; songsDataGridView.CellBorderStyle = DataGridViewCellBorderStyle.Single; songsDataGridView.GridColor = Color.Black; songsDataGridView.RowHeadersVisible = false; songsDataGridView.Columns[0].Name = "Release Date"; songsDataGridView.Columns[1].Name = "Track"; songsDataGridView.Columns[2].Name = "Title"; songsDataGridView.Columns[3].Name = "Artist"; songsDataGridView.Columns[4].Name = "Album"; songsDataGridView.Columns[4].DefaultCellStyle.Font = new Font(songsDataGridView.DefaultCellStyle.Font, FontStyle.Italic); songsDataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; songsDataGridView.MultiSelect = false; songsDataGridView.Dock = DockStyle.Fill; songsDataGridView.CellFormatting += new DataGridViewCellFormattingEventHandler( songsDataGridView_CellFormatting); }Private Sub SetupDataGridView() Me.Controls.Add(songsDataGridView) songsDataGridView.ColumnCount = 5 With songsDataGridView.ColumnHeadersDefaultCellStyle .BackColor = Color.Navy .ForeColor = Color.White .Font = New Font(songsDataGridView.Font, FontStyle.Bold) End With With songsDataGridView .Name = "songsDataGridView" .Location = New Point(8, 8) .Size = New Size(500, 250) .AutoSizeRowsMode = _ DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders .ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single .CellBorderStyle = DataGridViewCellBorderStyle.Single .GridColor = Color.Black .RowHeadersVisible = False .Columns(0).Name = "Release Date" .Columns(1).Name = "Track" .Columns(2).Name = "Title" .Columns(3).Name = "Artist" .Columns(4).Name = "Album" .Columns(4).DefaultCellStyle.Font = _ New Font(Me.songsDataGridView.DefaultCellStyle.Font, FontStyle.Italic) .SelectionMode = DataGridViewSelectionMode.FullRowSelect .MultiSelect = False .Dock = DockStyle.Fill End With End SubDenetime
PopulateDataGridViewsatır eklemek için bir yöntem DataGridView oluşturun.Her satır bir şarkıyı ve ilişkili bilgilerini temsil eder.
private void PopulateDataGridView() { string[] row0 = { "11/22/1968", "29", "Revolution 9", "Beatles", "The Beatles [White Album]" }; string[] row1 = { "1960", "6", "Fools Rush In", "Frank Sinatra", "Nice 'N' Easy" }; string[] row2 = { "11/11/1971", "1", "One of These Days", "Pink Floyd", "Meddle" }; string[] row3 = { "1988", "7", "Where Is My Mind?", "Pixies", "Surfer Rosa" }; string[] row4 = { "5/1981", "9", "Can't Find My Mind", "Cramps", "Psychedelic Jungle" }; string[] row5 = { "6/10/2003", "13", "Scatterbrain. (As Dead As Leaves.)", "Radiohead", "Hail to the Thief" }; string[] row6 = { "6/30/1992", "3", "Dress", "P J Harvey", "Dry" }; songsDataGridView.Rows.Add(row0); songsDataGridView.Rows.Add(row1); songsDataGridView.Rows.Add(row2); songsDataGridView.Rows.Add(row3); songsDataGridView.Rows.Add(row4); songsDataGridView.Rows.Add(row5); songsDataGridView.Rows.Add(row6); songsDataGridView.Columns[0].DisplayIndex = 3; songsDataGridView.Columns[1].DisplayIndex = 4; songsDataGridView.Columns[2].DisplayIndex = 0; songsDataGridView.Columns[3].DisplayIndex = 1; songsDataGridView.Columns[4].DisplayIndex = 2; }Private Sub PopulateDataGridView() Dim row0 As String() = {"11/22/1968", "29", "Revolution 9", _ "Beatles", "The Beatles [White Album]"} Dim row1 As String() = {"1960", "6", "Fools Rush In", _ "Frank Sinatra", "Nice 'N' Easy"} Dim row2 As String() = {"11/11/1971", "1", "One of These Days", _ "Pink Floyd", "Meddle"} Dim row3 As String() = {"1988", "7", "Where Is My Mind?", _ "Pixies", "Surfer Rosa"} Dim row4 As String() = {"5/1981", "9", "Can't Find My Mind", _ "Cramps", "Psychedelic Jungle"} Dim row5 As String() = {"6/10/2003", "13", _ "Scatterbrain. (As Dead As Leaves.)", _ "Radiohead", "Hail to the Thief"} Dim row6 As String() = {"6/30/1992", "3", "Dress", "P J Harvey", "Dry"} With Me.songsDataGridView.Rows .Add(row0) .Add(row1) .Add(row2) .Add(row3) .Add(row4) .Add(row5) .Add(row6) End With With Me.songsDataGridView .Columns(0).DisplayIndex = 3 .Columns(1).DisplayIndex = 4 .Columns(2).DisplayIndex = 0 .Columns(3).DisplayIndex = 1 .Columns(4).DisplayIndex = 2 End With End SubYardımcı program yöntemleriyle olay işleyicileri iliştirebilirsiniz.
Ekle ve Sil düğmelerinin Click olaylarını, formun olaylarını ve Load DataGridView denetimin olaylarını CellFormatting işleyebilirsiniz.
Ekle düğmesinin olayı Click ıldığında, değerine yeni ve boş bir satır DataGridView eklenir.
Sil düğmesinin olayı ortaya çıkarıldığında, kullanıcının yeni satırlar eklemeye olanak sağlayan yeni kayıtlar için satır olmadığı sürece seçili Click satır silinir. Bu satır her zaman denetimde son DataGridView satırdır.
Formun olayı Load 2009'da ,
SetupLayoutSetupDataGridViewve yardımcı yöntemleriPopulateDataGridViewçağrılır.Olay biçimlendirilmiş olduğunda, hücrenin değeri ayrıştırılamadıkça sütundaki her hücre uzun CellFormatting
Datebir tarih olarak biçimlendirildi.public Form1() { this.Load += new EventHandler(Form1_Load); } private void Form1_Load(System.Object sender, System.EventArgs e) { SetupLayout(); SetupDataGridView(); PopulateDataGridView(); } private void songsDataGridView_CellFormatting(object sender, System.Windows.Forms.DataGridViewCellFormattingEventArgs e) { if (e != null) { if (this.songsDataGridView.Columns[e.ColumnIndex].Name == "Release Date") { if (e.Value != null) { try { e.Value = DateTime.Parse(e.Value.ToString()) .ToLongDateString(); e.FormattingApplied = true; } catch (FormatException) { Console.WriteLine("{0} is not a valid date.", e.Value.ToString()); } } } } } private void addNewRowButton_Click(object sender, EventArgs e) { this.songsDataGridView.Rows.Add(); } private void deleteRowButton_Click(object sender, EventArgs e) { if (this.songsDataGridView.SelectedRows.Count > 0 && this.songsDataGridView.SelectedRows[0].Index != this.songsDataGridView.Rows.Count - 1) { this.songsDataGridView.Rows.RemoveAt( this.songsDataGridView.SelectedRows[0].Index); } }Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load SetupLayout() SetupDataGridView() PopulateDataGridView() End Sub Private Sub songsDataGridView_CellFormatting(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) _ Handles songsDataGridView.CellFormatting If e IsNot Nothing Then If Me.songsDataGridView.Columns(e.ColumnIndex).Name = _ "Release Date" Then If e.Value IsNot Nothing Then Try e.Value = DateTime.Parse(e.Value.ToString()) _ .ToLongDateString() e.FormattingApplied = True Catch ex As FormatException Console.WriteLine("{0} is not a valid date.", e.Value.ToString()) End Try End If End If End If End Sub Private Sub addNewRowButton_Click(ByVal sender As Object, _ ByVal e As EventArgs) Handles addNewRowButton.Click Me.songsDataGridView.Rows.Add() End Sub Private Sub deleteRowButton_Click(ByVal sender As Object, _ ByVal e As EventArgs) Handles deleteRowButton.Click If Me.songsDataGridView.SelectedRows.Count > 0 AndAlso _ Not Me.songsDataGridView.SelectedRows(0).Index = _ Me.songsDataGridView.Rows.Count - 1 Then Me.songsDataGridView.Rows.RemoveAt( _ Me.songsDataGridView.SelectedRows(0).Index) End If End Sub
Uygulamayı Test Etme
Artık formu test etmek için beklendiği gibi davranarak emin olun.
Formu test etmek için
Uygulamayı çalıştırmak için F5'e basın.
içinde listelenen DataGridView şarkıları görüntüleyen bir denetim
PopulateDataGridViewgörüntülenir. Satır Ekle düğmesiyle yeni satırlar ekleyebilir ve Satırı Sil düğmesiyle seçili satırları silebilirsiniz. Sınırsız denetim veri deposudur ve verileri veya dizisi gibi herhangi bir dış DataGridView kaynaktan DataSet bağımsızdır.
Sonraki Adımlar
Bu uygulama, denetimin özellikleri hakkında DataGridView temel bir anlayış sağlar. Denetimin görünümünü ve davranışını çeşitli DataGridView yollarla özelleştirebilirsiniz:
Kenarlık ve üst bilgi stillerini değiştirme. Daha fazla bilgi için, bkz. How to: Change the Border and Gridline Styles in the Windows Forms DataGridView Control.
Denetime kullanıcı girişini etkinleştirin veya DataGridView kısıtlar. Daha fazla bilgi için bkz. Windows Forms DataGridViewDenetiminde Satır Ekleme ve Silmeyi Engelleme ve Nasıl kullanılır: Read-Only Forms DataGridView Denetiminde Sütunları Windows Yapma.
Veritabanıyla ilgili hatalar için kullanıcı girişini denetleyin. Daha fazla bilgi için bkz. Walkthrough: Windows Forms DataGridViewDenetiminde Veri Girişi Sırasında Oluşan Hataları İşleme.
Sanal modu kullanarak çok büyük veri kümelerini işleme. Daha fazla bilgi için bkz. Walkthrough: Implementing Virtual Mode in the Windows Forms DataGridView Control.
Hücrelerin görünümünü özelleştirme. Daha fazla bilgi için, bkz. How to: Customize the Appearance of Cells in the Windows Forms DataGridView Control ve How to: Set Default Cell Styles for the Windows Forms DataGridView Control.