Csharp/CSharp Tutorial/GUI Windows Forms/DataGridView
Содержание
Calculation with DataGridView
<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;
class SimpleSpreadForm : Form { public SimpleSpreadForm() { InitializeComponent(); m_Grid.SelectionMode = DataGridViewSelectionMode.RowHeaderSelect; } private void OnFormLoad(object sender, EventArgs e) { int start = (int)"A"; for (int i = 0; i < 26; i++) { string colName = ((char)(i + start)).ToString(); int index = m_Grid.Columns.Add(colName, colName); m_Grid.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable; m_Grid.Columns[i].Width = 75; } for (int i = 0; i < 50; i++) { m_Grid.Rows.Add(); } } private void OnColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) { m_Grid.ClearSelection(); foreach (DataGridViewRow row in m_Grid.Rows) { row.Cells[e.ColumnIndex].Selected = true; } } private void OnRowAdded(object sender, DataGridViewRowsAddedEventArgs e) { m_Grid.Rows[e.RowIndex].HeaderCell.Value = e.RowIndex.ToString(); } private void OnSumCells(object sender, EventArgs e) { DataGridViewSelectedCellCollection selCells = m_Grid.SelectedCells; if (selCells.Count < 2) return; Dictionary<int, int> rowSum = new Dictionary<int, int>(); Dictionary<int, int> colSum = new Dictionary<int, int>(); foreach (DataGridViewCell cell in selCells) { if (!rowSum.ContainsKey(cell.RowIndex)) { if (cell.Value != null && cell.Value.ToString() != string.Empty) { rowSum[cell.RowIndex] = int.Parse((string)cell.Value); } } } } private void InitializeComponent() { this.m_Grid = new System.Windows.Forms.DataGridView(); this.toolStrip1 = new System.Windows.Forms.ToolStrip(); this.m_SumToolStripButton = new System.Windows.Forms.ToolStripButton(); ((System.ruponentModel.ISupportInitialize)(this.m_Grid)).BeginInit(); this.toolStrip1.SuspendLayout(); this.SuspendLayout(); // // m_Grid // this.m_Grid.Dock = System.Windows.Forms.DockStyle.Fill; this.m_Grid.Location = new System.Drawing.Point(0, 25); this.m_Grid.Name = "m_Grid"; this.m_Grid.Size = new System.Drawing.Size(727, 467); this.m_Grid.TabIndex = 0; this.m_Grid.Text = "dataGridView1"; this.m_Grid.ColumnHeaderMouseClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.OnColumnHeaderMouseClick); this.m_Grid.RowsAdded += new System.Windows.Forms.DataGridViewRowsAddedEventHandler(this.OnRowAdded); // // toolStrip1 // this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.m_SumToolStripButton}); this.toolStrip1.Location = new System.Drawing.Point(0, 0); this.toolStrip1.Name = "toolStrip1"; this.toolStrip1.Size = new System.Drawing.Size(727, 25); this.toolStrip1.TabIndex = 1; this.toolStrip1.Text = "toolStrip1"; // // m_SumToolStripButton // this.m_SumToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; this.m_SumToolStripButton.Name = "m_SumToolStripButton"; this.m_SumToolStripButton.Text = "Sum"; this.m_SumToolStripButton.Click += new System.EventHandler(this.OnSumCells); // // SimpleSpreadForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(727, 492); this.Controls.Add(this.m_Grid); this.Controls.Add(this.toolStrip1); this.Name = "SimpleSpreadForm"; this.Text = "Form1"; this.Load += new System.EventHandler(this.OnFormLoad); ((System.ruponentModel.ISupportInitialize)(this.m_Grid)).EndInit(); this.toolStrip1.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); } private System.Windows.Forms.DataGridView m_Grid; private System.Windows.Forms.ToolStrip toolStrip1; private System.Windows.Forms.ToolStripButton m_SumToolStripButton; [STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new SimpleSpreadForm()); } }</source>
Custom Header Cells
<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;
class Form1 : Form { public Form1() { InitializeComponent(); } private void OnFormLoad(object sender, EventArgs e) { m_Grid.ColumnCount = 5; m_Grid.Rows.Add(5); } private void OnCellPainting(object sender, DataGridViewCellPaintingEventArgs e) { if (e.RowIndex == -1) { e.Graphics.FillRectangle(Brushes.Aqua, e.CellBounds); e.Handled = true; } if (e.ColumnIndex == -1) { } } private void InitializeComponent() { this.m_Grid = new System.Windows.Forms.DataGridView(); ((System.ruponentModel.ISupportInitialize)(this.m_Grid)).BeginInit(); this.SuspendLayout(); // this.m_Grid.Dock = System.Windows.Forms.DockStyle.Fill; this.m_Grid.Location = new System.Drawing.Point(0, 0); this.m_Grid.Name = "m_Grid"; this.m_Grid.Size = new System.Drawing.Size(642, 347); this.m_Grid.TabIndex = 0; this.m_Grid.Text = "dataGridView1"; this.m_Grid.CellPainting += new System.Windows.Forms.DataGridViewCellPaintingEventHandler(this.OnCellPainting); // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(642, 347); this.Controls.Add(this.m_Grid); this.Name = "Form1"; this.Text = "Form1"; this.Load += new System.EventHandler(this.OnFormLoad); ((System.ruponentModel.ISupportInitialize)(this.m_Grid)).EndInit(); this.ResumeLayout(false); }
private System.Windows.Forms.DataGridView m_Grid; [STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } }</source>
Fill Columns
<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;
class Form1 : Form { public Form1() { InitializeComponent(); } private void InitializeComponent() { this.dataGridView1 = new System.Windows.Forms.DataGridView(); this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.Column4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.Column5 = new System.Windows.Forms.DataGridViewTextBoxColumn(); ((System.ruponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); this.SuspendLayout(); // this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.Column1, this.Column2, this.Column3, this.Column4, this.Column5}); this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill; this.dataGridView1.Location = new System.Drawing.Point(0, 0); this.dataGridView1.Name = "dataGridView1"; this.dataGridView1.Size = new System.Drawing.Size(292, 266); this.dataGridView1.TabIndex = 0; this.dataGridView1.Text = "dataGridView1"; // this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; this.Column1.FillWeight = 253.8071F; this.Column1.HeaderText = "Column1"; this.Column1.MinimumWidth = 100; this.Column1.Name = "Column1"; // this.Column2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; this.Column2.FillWeight = 61.54822F; this.Column2.HeaderText = "Column2"; this.Column2.MinimumWidth = 100; this.Column2.Name = "Column2"; // this.Column3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; this.Column3.FillWeight = 61.54822F; this.Column3.HeaderText = "Column3"; this.Column3.MinimumWidth = 100; this.Column3.Name = "Column3"; // this.Column4.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; this.Column4.FillWeight = 61.54822F; this.Column4.HeaderText = "Column4"; this.Column4.MinimumWidth = 100; this.Column4.Name = "Column4"; // // Column5 // this.Column5.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; this.Column5.FillWeight = 61.54822F; this.Column5.HeaderText = "Column5"; this.Column5.Name = "Column5"; // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(292, 266); this.Controls.Add(this.dataGridView1); this.Name = "Form1"; this.Text = "Form1"; ((System.ruponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); this.ResumeLayout(false); }
private System.Windows.Forms.DataGridView dataGridView1; private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn3; private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn4; private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn5; private System.Windows.Forms.DataGridViewTextBoxColumn Column1; private System.Windows.Forms.DataGridViewTextBoxColumn Column2; private System.Windows.Forms.DataGridViewTextBoxColumn Column3; private System.Windows.Forms.DataGridViewTextBoxColumn Column4; private System.Windows.Forms.DataGridViewTextBoxColumn Column5; [STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } }</source>
Programmatic Grid
<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;
class ProgrammaticGridForm: Form { public ProgrammaticGridForm() { InitializeComponent(); } private void OnAddCols(object sender, EventArgs e) { m_Grid.Columns.Add("MyColumnName", "MyColumnHeaderText"); m_Grid.Columns.Add("MyOtherColumnName", "MyOtherColumnHeaderText"); } private void OnAddMore(object sender, EventArgs e) { m_Grid.ColumnCount = 5; m_Grid.Columns[2].Name = "Col3"; m_Grid.Columns[2].HeaderText = "Col3"; m_Grid.Columns[3].Name = "Col4"; m_Grid.Columns[3].HeaderText = "Col4"; m_Grid.Columns[4].Name = "Col5"; m_Grid.Columns[4].HeaderText = "Col5"; } private void OnRemove(object sender, EventArgs e) { m_Grid.ColumnCount = 3; } private void OnAddRows(object sender, EventArgs e) { m_Grid.Rows.Add(20); } private void OnAddHeterows(object sender, EventArgs e) { m_Grid.ColumnCount = 5; DataGridViewRow heterow = new DataGridViewRow(); DataGridViewComboBoxCell comboCell = new DataGridViewComboBoxCell(); comboCell.Items.Add("Black"); comboCell.Items.Add("White"); comboCell.Value = "White"; heterow.Cells.Add(comboCell); for (int i = 0; i < 4; i++) { heterow.Cells.Add(new DataGridViewTextBoxCell()); } m_Grid.Rows.Add(heterow); } private void OnAddAnotherHeterow(object sender, EventArgs e) { DataGridViewRow heterow = new DataGridViewRow(); heterow.CreateCells(m_Grid); heterow.Cells.RemoveAt(0); heterow.Cells.Insert(0, new DataGridViewComboBoxCell()); m_Grid.Rows.Add(heterow); } private void InitializeComponent() { this.m_AddColsToGridButton = new System.Windows.Forms.Button(); this.m_AddMoreColsWithColCountButton = new System.Windows.Forms.Button(); this.m_RemoveColsButton = new System.Windows.Forms.Button(); this.m_Grid = new System.Windows.Forms.DataGridView(); this.m_AddRowsButton = new System.Windows.Forms.Button(); this.m_AddHeterows = new System.Windows.Forms.Button(); this.m_AddAnotherHeterowButton = new System.Windows.Forms.Button(); ((System.ruponentModel.ISupportInitialize)(this.m_Grid)).BeginInit(); this.SuspendLayout(); // // m_AddColsToGridButton // this.m_AddColsToGridButton.Location = new System.Drawing.Point(13, 13); this.m_AddColsToGridButton.Name = "m_AddColsToGridButton"; this.m_AddColsToGridButton.Size = new System.Drawing.Size(131, 23); this.m_AddColsToGridButton.TabIndex = 0; this.m_AddColsToGridButton.Text = "Add Columns To Grid"; this.m_AddColsToGridButton.Click += new System.EventHandler(this.OnAddCols); // // m_AddMoreColsWithColCountButton // this.m_AddMoreColsWithColCountButton.Location = new System.Drawing.Point(168, 13); this.m_AddMoreColsWithColCountButton.Name = "m_AddMoreColsWithColCountButton"; this.m_AddMoreColsWithColCountButton.Size = new System.Drawing.Size(208, 23); this.m_AddMoreColsWithColCountButton.TabIndex = 1; this.m_AddMoreColsWithColCountButton.Text = "Add More Columns with ColumnCount"; this.m_AddMoreColsWithColCountButton.Click += new System.EventHandler(this.OnAddMore); // // m_RemoveColsButton // this.m_RemoveColsButton.Location = new System.Drawing.Point(391, 12); this.m_RemoveColsButton.Name = "m_RemoveColsButton"; this.m_RemoveColsButton.Size = new System.Drawing.Size(196, 23); this.m_RemoveColsButton.TabIndex = 2; this.m_RemoveColsButton.Text = "Remove Columns with ColumnCount"; this.m_RemoveColsButton.Click += new System.EventHandler(this.OnRemove); // // m_Grid // this.m_Grid.Location = new System.Drawing.Point(12, 85); this.m_Grid.Name = "m_Grid"; this.m_Grid.Size = new System.Drawing.Size(574, 265); this.m_Grid.TabIndex = 3; // // m_AddRowsButton // this.m_AddRowsButton.Location = new System.Drawing.Point(13, 43); this.m_AddRowsButton.Name = "m_AddRowsButton"; this.m_AddRowsButton.Size = new System.Drawing.Size(131, 23); this.m_AddRowsButton.TabIndex = 4; this.m_AddRowsButton.Text = "Add Rows"; this.m_AddRowsButton.Click += new System.EventHandler(this.OnAddRows); // // m_AddHeterows // this.m_AddHeterows.Location = new System.Drawing.Point(168, 42); this.m_AddHeterows.Name = "m_AddHeterows"; this.m_AddHeterows.Size = new System.Drawing.Size(138, 23); this.m_AddHeterows.TabIndex = 5; this.m_AddHeterows.Text = "Add Heterows"; this.m_AddHeterows.Click += new System.EventHandler(this.OnAddHeterows); // // m_AddAnotherHeterowButton // this.m_AddAnotherHeterowButton.Location = new System.Drawing.Point(346, 41); this.m_AddAnotherHeterowButton.Name = "m_AddAnotherHeterowButton"; this.m_AddAnotherHeterowButton.Size = new System.Drawing.Size(159, 23); this.m_AddAnotherHeterowButton.TabIndex = 6; this.m_AddAnotherHeterowButton.Text = "Add Another Heterow"; this.m_AddAnotherHeterowButton.Click += new System.EventHandler(this.OnAddAnotherHeterow); // // ProgrammaticGridForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(650, 362); this.Controls.Add(this.m_AddAnotherHeterowButton); this.Controls.Add(this.m_AddHeterows); this.Controls.Add(this.m_AddRowsButton); this.Controls.Add(this.m_Grid); this.Controls.Add(this.m_RemoveColsButton); this.Controls.Add(this.m_AddMoreColsWithColCountButton); this.Controls.Add(this.m_AddColsToGridButton); this.Name = "ProgrammaticGridForm"; this.Text = "Programmatic Grid"; ((System.ruponentModel.ISupportInitialize)(this.m_Grid)).EndInit(); this.ResumeLayout(false); }
private System.Windows.Forms.Button m_AddColsToGridButton; private System.Windows.Forms.Button m_AddMoreColsWithColCountButton; private System.Windows.Forms.Button m_RemoveColsButton; private System.Windows.Forms.DataGridView m_Grid; private System.Windows.Forms.Button m_AddRowsButton; private System.Windows.Forms.Button m_AddHeterows; private System.Windows.Forms.Button m_AddAnotherHeterowButton; [STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new ProgrammaticGridForm()); } }</source>
Simple DataGridView
<source lang="csharp">using System; using System.Drawing; using System.Windows.Forms; class MyClass : Form {
[STAThread] public static void Main() { Application.Run(new MyClass()); } public MyClass() { Text = "Simple DataGridView"; DataGridView grid = new DataGridView(); grid.Parent = this; grid.AutoSize = true; grid.Dock = DockStyle.Fill; grid.ColumnCount = 3; grid.Columns[0].HeaderText = "First Name"; grid.Columns[1].HeaderText = "Last Name"; grid.Columns[2].HeaderText = "Email Address"; }
}</source>
Virtual Data
<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;
class VirtualModeForm : Form { private List<DataObject> m_Data = new List<DataObject>(); private List<bool> m_Visited = new List<bool>(); public VirtualModeForm() { InitializeComponent(); m_Grid.CellValueNeeded += OnCellValueNeeded; m_GetVisitedCountButton.Click += OnGetVisitedCount; InitData(); InitGrid(); } private void InitData() { for (int i = 0; i < 100; i++) { m_Visited.Add(false); DataObject obj = new DataObject(); obj.Id = i; obj.Val = 2 * i; m_Data.Add(obj); } } private void InitGrid() { m_Grid.VirtualMode = true; m_Grid.ReadOnly = true; m_Grid.AllowUserToAddRows = false; m_Grid.AllowUserToDeleteRows = false; m_Grid.ColumnCount = 3; m_Grid.Rows.Add(); m_Grid.Rows.AddCopies(0, 100); } private void OnCellValueNeeded(object sender, DataGridViewCellValueEventArgs e) { m_Visited[e.RowIndex] = true; if (e.ColumnIndex == 0) { e.Value = m_Data[e.RowIndex].Id; } else if (e.ColumnIndex == 1) { e.Value = m_Data[e.RowIndex].Val; } else if (e.ColumnIndex == 2) { Random rand = new Random(); e.Value = rand.Next(); } } private void OnGetVisitedCount(object sender, EventArgs e) { int count = 0; foreach (bool b in m_Visited) { if (b) count++; } MessageBox.Show(count.ToString()); } private void InitializeComponent() { this.m_Grid = new System.Windows.Forms.DataGridView(); this.m_GetVisitedCountButton = new System.Windows.Forms.Button(); ((System.ruponentModel.ISupportInitialize)(this.m_Grid)).BeginInit(); this.SuspendLayout(); // // m_Grid // this.m_Grid.Location = new System.Drawing.Point(12, 12); this.m_Grid.Name = "m_Grid"; this.m_Grid.Size = new System.Drawing.Size(327, 252); this.m_Grid.TabIndex = 0; this.m_Grid.Text = "dataGridView1"; // // m_GetVisitedCountButton // this.m_GetVisitedCountButton.Location = new System.Drawing.Point(12, 280); this.m_GetVisitedCountButton.Name = "m_GetVisitedCountButton"; this.m_GetVisitedCountButton.Size = new System.Drawing.Size(231, 23); this.m_GetVisitedCountButton.TabIndex = 1; this.m_GetVisitedCountButton.Text = "Get Count of Visited Cells"; // // VirtualModeForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(365, 346); this.Controls.Add(this.m_GetVisitedCountButton); this.Controls.Add(this.m_Grid); this.Name = "VirtualModeForm"; this.Text = "Form1"; ((System.ruponentModel.ISupportInitialize)(this.m_Grid)).EndInit(); this.ResumeLayout(false); } private System.Windows.Forms.DataGridView m_Grid; private System.Windows.Forms.Button m_GetVisitedCountButton; [STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new VirtualModeForm()); } } public class DataObject { private int m_Id; private int m_Val; public int Val { get { return m_Val; } set { m_Val = value; } } public int Id { get { return m_Id; } set { m_Id = value; } } }</source>