İzlenecek yol: Bağlantısız Bir Windows Forms DataGridView Denetimi Oluşturma
Genellikle bir veritabanından alınmayan tablosal verileri görüntülemek isteyebilirsiniz. Örneğin, iki boyutlu dize dizisinin içeriğini göstermek isteyebilirsiniz. sınıfı, DataGridView verileri bir veri kaynağına bağlamadan görüntülemek için kolay ve yüksek oranda özelleştirilebilir bir yol sağlar. Bu izlenecek yol, bir DataGridView denetimi doldurmayı ve "ilişkisiz" modda satırların eklenmesini ve silinmesini yönetmeyi gösterir. Varsayılan olarak, kullanıcı yeni satırlar ekleyebilir. Satır eklemeyi önlemek için özelliğini olarak false
ayarlayınAllowUserToAddRows.
Bu konudaki kodu tek bir liste olarak kopyalamak için bkz . Nasıl yapılır: İlişkisiz Windows Forms DataGridView Denetimi Oluşturma.
Form Oluşturma
İlişkisiz DataGridView denetimi kullanmak için
öğesinden Form türetilen ve aşağıdaki değişken bildirimlerini ve
Main
yöntemini içeren bir sınıf oluş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 Class
Formun düzenini ayarlamak için formunuzun sınıf tanımına bir
SetupLayout
yöntem uygulayın.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 Sub
Sütunları ve özellikleri ayarlamak DataGridView için bir
SetupDataGridView
yöntem oluşturun.Bu yöntem önce denetimi formun Controls koleksiyonuna eklerDataGridView. Ardından, görüntülenecek sütun sayısı özelliği kullanılarak ColumnCount ayarlanır. Sütun başlıkları için varsayılan stil, özelliği tarafından ColumnHeadersDefaultCellStyle döndürülen öğesinin DataGridViewCellStyleBackColor, ForeColorve Font özellikleri ayarlanarak ayarlanır.
Düzen ve görünüm özellikleri ayarlanır ve ardından sütun adları atanır. Bu yöntemden çıkıldığında, DataGridView denetim doldurulmaya hazır olur.
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 Sub
Denetime satır eklemek için DataGridView bir
PopulateDataGridView
yöntem 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 Sub
Yardımcı program yöntemleri mevcutken, olay işleyicileri ekleyebilirsiniz.
Ekle ve Sil düğmelerinin Click olaylarını, formun Load olayını ve denetimin CellFormattingDataGridView olayını işleyeceksiniz.
Ekle düğmesinin Click olayı oluşturulduğunda öğesine yeni, boş bir satır eklenirDataGridView.
Sil düğmesinin Click olayı oluşturulduğunda, kullanıcının yeni satır eklemesine olanak tanıyan yeni kayıtların satırı olmadığı sürece seçili satır silinir. Bu satır her zaman denetimdeki DataGridView son satırdır.
Formun Load olayı oluşturulduğunda ,
SetupLayout
SetupDataGridView
vePopulateDataGridView
yardımcı program yöntemleri çağrılır.CellFormatting Olay tetiklendiğinde, hücrenin
Date
değeri ayrıştırılamadığı sürece sütundaki her hücre uzun bir tarih olarak biçimlendirilir.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 edebilir ve beklendiği gibi davrandığından emin olabilirsiniz.
Formu test etmek için
Uygulamayı çalıştırmak için F5'e basın.
içinde
PopulateDataGridView
listelenen şarkıları görüntüleyen bir DataGridView denetim görürsünüz. Satır Ekle düğmesiyle yeni satırlar ekleyebilir ve Satır Sil düğmesiyle seçili satırları silebilirsiniz. İlişkisiz DataGridView denetim veri deposudur ve verileri veya dizi gibi herhangi bir DataSet dış kaynaklardan bağımsızdır.
Sonraki Adımlar
Bu uygulama, denetimin DataGridView özellikleri hakkında temel bilgiler sağlar. Denetimin görünümünü ve davranışını DataGridView çeşitli yollarla özelleştirebilirsiniz:
Kenarlık ve üst bilgi stillerini değiştirin. Daha fazla bilgi için bkz . Nasıl yapılır: Windows Forms DataGridView Denetiminde Kenarlık ve Kılavuz Çizgisi Stillerini Değiştirme.
Denetime DataGridView kullanıcı girişini etkinleştirin veya kısıtlayın. Daha fazla bilgi için bkz . How to: Prevent Row Addition and Deletion in the Windows Forms DataGridView Control ve How to: Make Columns Read-Only in the Windows Forms DataGridView Control.
Veritabanıyla ilgili hatalar için kullanıcı girişini denetleyin. Daha fazla bilgi için bkz . İzlenecek Yol: Windows Forms DataGridView Denetiminde Veri Girişi Sırasında Oluşan Hataları İşleme.
Sanal modu kullanarak çok büyük veri kümelerini işleyin. Daha fazla bilgi için bkz . İzlenecek Yol: Windows Forms DataGridView Denetiminde Sanal Modu Uygulama.
Hücrelerin görünümünü özelleştirin. Daha fazla bilgi için bkz. Nasıl yapılır: Windows Forms DataGridView Denetiminde Hücrelerin Görünümünü Özelleştirme ve Nasıl Yapılır: Windows Forms DataGridView Denetimi için Varsayılan Hücre Stillerini Ayarlama.
Ayrıca bkz.
.NET Desktop feedback
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin