Panduan: Membuat Kontrol DataGridView Formulir Windows Tidak Terikat
Anda mungkin sering ingin menampilkan data tabular yang tidak berasal dari database. Misalnya, Anda mungkin ingin menampilkan konten array string dua dimensi. Kelas ini DataGridView menyediakan cara yang mudah dan sangat dapat disesuaikan untuk menampilkan data tanpa mengikat ke sumber data. Panduan ini menunjukkan cara mengisi DataGridView kontrol dan mengelola penambahan dan penghapusan baris dalam mode "tidak terikat". Secara default, pengguna dapat menambahkan baris baru. Untuk mencegah penambahan baris, atur AllowUserToAddRows properti adalah false
.
Untuk menyalin kode dalam topik ini sebagai daftar tunggal, lihat Cara: Membuat Kontrol DataGridView Formulir Windows Tidak Terikat.
Membuat Formulir
Untuk menggunakan kontrol DataGridView yang tidak terikat
Buat kelas yang berasal dari Form dan berisi deklarasi dan
Main
metode variabel berikut.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
Terapkan
SetupLayout
metode dalam definisi kelas formulir Anda untuk menyiapkan tata letak formulir.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
Buat
SetupDataGridView
metode untuk menyiapkan DataGridView kolom dan properti.Metode ini terlebih dahulu DataGridView menambahkan kontrol ke koleksi formulir Controls . Selanjutnya, jumlah kolom yang akan ditampilkan diatur menggunakan ColumnCount properti . Gaya default untuk header kolom diatur dengan mengatur BackColorproperti , ForeColor, dan Font yang DataGridViewCellStyle dikembalikan oleh ColumnHeadersDefaultCellStyle properti .
Properti tata letak dan tampilan diatur, lalu nama kolom ditetapkan. Ketika metode ini keluar, DataGridView kontrol siap untuk diisi.
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
Buat
PopulateDataGridView
metode untuk menambahkan baris ke DataGridView kontrol.Setiap baris mewakili lagu dan informasi terkaitnya.
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
Dengan metode utilitas di tempat, Anda dapat melampirkan penanganan aktivitas.
Anda akan menangani peristiwa tombol Click Tambahkan dan Hapus, peristiwa formulirLoad, dan DataGridView peristiwa kontrolCellFormatting.
Saat acara Tambahkan tombol Click dinaikkan, baris kosong baru ditambahkan ke DataGridView.
Saat peristiwa tombol Click Hapus dinaikkan, baris yang dipilih dihapus, kecuali jika itu adalah baris untuk rekaman baru, yang memungkinkan pengguna menambahkan baris baru. Baris ini selalu menjadi baris terakhir dalam DataGridView kontrol.
Ketika peristiwa formulir Load dinaikkan,
SetupLayout
metode utilitas ,SetupDataGridView
, danPopulateDataGridView
dipanggil.CellFormatting Saat peristiwa dinaikkan, setiap sel dalam kolom diformat
Date
sebagai tanggal panjang, kecuali nilai sel tidak dapat diurai.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
Menguji Aplikasi
Anda sekarang dapat menguji formulir untuk memastikan formulir tersebut berulah seperti yang diharapkan.
Untuk menguji formulir
Tekan F5 untuk menjalankan aplikasi.
Anda akan melihat DataGridView kontrol yang menampilkan lagu yang tercantum di
PopulateDataGridView
. Anda dapat menambahkan baris baru dengan tombol Tambahkan Baris , dan Anda bisa menghapus baris yang dipilih dengan tombol Hapus Baris . Kontrol tidak terikat DataGridView adalah penyimpanan data, dan datanya tidak bergantung pada sumber eksternal apa pun, seperti DataSet atau array.
Langkah berikutnya
Aplikasi ini memberi Anda pemahaman DataGridView dasar tentang kemampuan kontrol. Anda dapat menyesuaikan tampilan dan perilaku kontrol dengan DataGridView beberapa cara:
Ubah gaya batas dan header. Untuk informasi selengkapnya, lihat Cara: Mengubah Gaya Batas dan Garis Kisi di Kontrol Formulir Windows DataGridView.
Aktifkan atau batasi input pengguna ke DataGridView kontrol. Untuk informasi selengkapnya, lihat Cara: Mencegah Penambahan dan Penghapusan Baris di Kontrol Formulir Windows DataGridView, dan Cara: Membuat Kolom Baca-Saja di Formulir Windows Kontrol DataGridView.
Periksa input pengguna untuk kesalahan terkait database. Untuk informasi selengkapnya, lihat Panduan: Menangani Kesalahan yang Terjadi Selama Entri Data di kontrol Formulir Windows DataGridView.
Tangani himpunan data yang sangat besar menggunakan mode virtual. Untuk informasi selengkapnya, lihat Panduan: Menerapkan Mode Virtual di Formulir Windows Kontrol DataGridView.
Sesuaikan tampilan sel. Untuk informasi selengkapnya, lihat Cara: Menyesuaikan Tampilan Sel di Formulir Windows Kontrol DataGridView dan Cara: Mengatur Gaya Sel Default untuk Kontrol Formulir Windows DataGridView.
Baca juga
.NET Desktop feedback
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk