《(学习笔记)两天进步一点点》(1)——Windows控件DGV
说起来很惭愧,作为一名普通专科生,现在已经是大二了,不对、应该说现在已经大三了,按照学校的规章制度,到今年的11月份大三的学生就要离校了,接下来就要面对的实习、工作。唉,好无奈,专业课一踏糊涂、凭什么去找工作???
所以、现在要努力了…
《(学习笔记)两天进步一点点》从今天开始就要储蓄点点滴滴的力量、等待倾洪一泻的那一刻。
好了闲话少说,今天就去参观一下DataGridView【Windows应用程序】控件大本营吧。
一、总体概述
(1)使用 DataGridView 控件,可以显示和编辑来自多种不同类型的数据源的表格数据。
DataGridView其可以绑定的对象如下:
(1)任何实现Ilist接口的类,包括一维数组。 |
(2)、DGV涉及的相关类如下:
BindingSource 绑定的数据源 DataGridView DataGridViewCell 单元格 DataGridViewRow 行 DataGridViewColumn列 DataGridViewCellStyle 单元格格式 |
二、常用属性(常用方法、常用事件见右)
(1)DGV中的列类型
当绑定 DataGridView 控件并将 AutoGenerateColumns 属性设置为 true 时,会使用与绑定数据源中包含的数据类型相应的默认列类型自动生成列。
|
(2)设置 DataGridViewColumn的CellTemplate属性
private void CustomizeCellsInThirdColumn()
{
int thirdColumn = 2;
DataGridViewColumn column =
dataGridView.Columns[thirdColumn];
DataGridViewCell cell = new DataGridViewTextBoxCell();
cell.Style.BackColor = Color.Wheat;
column.CellTemplate = cell;
}
(3)设置DataGridColumn的显隐性
将 DataGridViewColumn.Visible 属性设置为 false。若要隐藏数据绑定期间自动生成的 CustomerID 列,请将下面的代码示例放置在 DataBindingComplete 事件处理程序中。
this.dataGridView1.Columns["CustomerID"].Visible = false;
(4)移除某一列
dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = customersDataSet;
dataGridView1.Columns.Remove("Fax");
(5)设置列的显示顺序
private void AdjustColumnOrder()
{
customersDataGridView.Columns["CustomerID"].Visible = false;
customersDataGridView.Columns["ContactName"].DisplayIndex = 0;
customersDataGridView.Columns["ContactTitle"].DisplayIndex = 1;
customersDataGridView.Columns["City"].DisplayIndex = 2;
customersDataGridView.Columns["Country"].DisplayIndex = 3;
customersDataGridView.Columns["CompanyName"].DisplayIndex = 4;
}
(6)冻结列
this.dataGridView1.Columns["AddToCartButton"].Frozen = true;
要实现此行为,可以冻结控件中的列。冻结一列后,其左侧(在从右到左的字符集中为右侧)的所有列也被冻结。冻结的列保持不动,而其他所有列可以滚动。
如果允许对列进行重新排序,则将冻结的列视为一组,以区别于未冻结的列。用户可重新调整冻结和未冻结这两个组中列的位置,但不能将其中一组中的列移动到另一组。
(7)启用列重新排序
在 DataGridView 控件中启用列重新排序后,用户可通过使用鼠标拖动列标题的方式将列移动到新位置。在 DataGridView 控件中,DataGridView.AllowUserToOrderColumns 属性值确定用户是否能将列移动到不同的位置。
通过编程方式启用列重新排序
将 DataGridView.AllowUserToOrderColumns 属性设置为 true。
(8)隐藏列标题
将 DataGridView.ColumnHeadersVisible 属性设置为 false。
(9)设置只读列
dataGridView1.Columns["CompanyName"].ReadOnly = true;
(10)防止添加和删除列行
有时可能想要防止用户在 DataGridView 控件中输入新的数据行或删除现有行。AllowUserToAddRows 属性指示新记录的行是否呈现于控件底部,而 AllowUserToDeleteRows 属性指示是否可以移除行。下面的代码示例使用这些属性,并设置 ReadOnly 属性以使该控件完全只读。
(11)获取或设置当前单元格
注意:您不能在 Visible 属性设置为 false 的行或列中设置当前单元格。
private void getCurrentCellButton_Click(object sender, System.EventArgs e)
{
string msg = String.Format("Row: {0}, Column: {1}",
dataGridView1.CurrentCell.RowIndex,
dataGridView1.CurrentCell.ColumnIndex);
MessageBox.Show(msg, "Current Cell");
}
private void setCurrentCellButton_Click(object sender, System.EventArgs e)
{
// Set the current cell to the cell in column 1, Row 0.
this.dataGridView1.CurrentCell = this.dataGridView1[1,0];
}
(12)在DataGridView中显示图标
private void createGraphicsColumn()
{
Icon treeIcon = new Icon(this.GetType(), "tree.ico");
DataGridViewImageColumn iconColumn = new DataGridViewImageColumn();
iconColumn.Image = treeIcon.ToBitmap();
iconColumn.Name = "Tree";
iconColumn.HeaderText = "Nice tree";
dataGridView1.Columns.Insert(2, iconColumn);
}
(13)自定义 DataGridView中数据格式的设置
using System;
using System.Drawing;
using System.Windows.Forms;
public class Form1 : Form
{
private DataGridView dataGridView1 = new DataGridView();
private Bitmap highPriImage;
private Bitmap mediumPriImage;
private Bitmap lowPriImage;
public Form1()
{
// Initialize the images.
try
{
highPriImage = new Bitmap("highPri.bmp");
mediumPriImage = new Bitmap("mediumPri.bmp");
lowPriImage = new Bitmap("lowPri.bmp");
}
catch (ArgumentException)
{
MessageBox.Show("The Priority column requires Bitmap images " +
"named highPri.bmp, mediumPri.bmp, and lowPri.bmp " +
"residing in the same directory as the executable file.");
}
// Initialize the DataGridView.
dataGridView1.Dock = DockStyle.Fill;
dataGridView1.AllowUserToAddRows = false;
dataGridView1.Columns.AddRange(
new DataGridViewTextBoxColumn(),
new DataGridViewImageColumn());
dataGridView1.Columns[0].Name = "Balance";
dataGridView1.Columns[1].Name = "Priority";
dataGridView1.Rows.Add("-100", "high");
dataGridView1.Rows.Add("0", "medium");
dataGridView1.Rows.Add("100", "low");
dataGridView1.CellFormatting +=
new System.Windows.Forms.DataGridViewCellFormattingEventHandler(
this.dataGridView1_CellFormatting);
this.Controls.Add(dataGridView1);
}
// Changes how cells are displayed depending on their columns and values.
private void dataGridView1_CellFormatting(object sender,
System.Windows.Forms.DataGridViewCellFormattingEventArgs e)
{
// Set the background to red for negative values in the Balance column.
if (dataGridView1.Columns[e.ColumnIndex].Name.Equals("Balance"))
{
Int32 intValue;
if (Int32.TryParse((String)e.Value, out intValue) &&
(intValue < 0))
{
e.CellStyle.BackColor = Color.Red;
e.CellStyle.SelectionBackColor = Color.DarkRed;
}
}
// Replace string values in the Priority column with images.
if (dataGridView1.Columns[e.ColumnIndex].Name.Equals("Priority"))
{
// Ensure that the value is a string.
String stringValue = e.Value as string;
if (stringValue == null) return;
// Set the cell ToolTip to the text value.
DataGridViewCell cell = dataGridView1[e.ColumnIndex, e.RowIndex];
cell.ToolTipText = stringValue;
// Replace the string value with the image value.
switch (stringValue)
{
case "high":
e.Value = highPriImage;
break;
case "medium":
e.Value = mediumPriImage;
break;
case "low":
e.Value = lowPriImage;
break;
}
}
}
public static void Main()
{
Application.Run(new Form1());
}
}
(14)设置DGV中的数据格式
设置货币和日期值的格式
设置 DataGridViewCellStyle 的 Format 属性。下面的代码示例使用列的 DefaultCellStyle 属性设置特定列的格式。 UnitPrice 列中的值以特定于当前区域性的货币格式显示(负值用括号括起来)。 ShipDate 列中的值以特定于当前区域性的短日期格式显示。有关 Format 值的更多信息,请参见为类型设置格式。
this.dataGridView1.Columns["UnitPrice"].DefaultCellStyle.Format = "c";
this.dataGridView1.Columns["ShipDate"].DefaultCellStyle.Format = "d";
自定义 null 数据库值的显示
设置 DataGridViewCellStyle 的 NullValue 属性。下面的代码示例使用 DataGridView.DefaultCellStyle 属性在所有包含等于 DBNull.Value 的值的单元格中显示“没有项”。
this.dataGridView1.DefaultCellStyle.NullValue = "no entry";
在基于文本的单元格中启用换行
将 DataGridViewCellStyle 的 WrapMode 属性设置为 DataGridViewTriState 枚举值之一。下面的代码示例使用 DataGridView.DefaultCellStyle 属性设置整个控件的换行模式。
this.dataGridView1.DefaultCellStyle.WrapMode =
DataGridViewTriState.True;
指定 DataGridView 单元格的文本对齐方式
将 DataGridViewCellStyle 的 Alignment 属性设置为 DataGridViewContentAlignment 枚举值之一。下面的代码示例使用列的 DefaultCellStyle 属性设置特定列的对齐方式。
this.dataGridView1.Columns["CustomerName"].DefaultCellStyle
.Alignment = DataGridViewContentAlignment.MiddleRight;
private void SetFormatting()
{
this.dataGridView1.Columns["UnitPrice"].DefaultCellStyle.Format = "c";
this.dataGridView1.Columns["ShipDate"].DefaultCellStyle.Format = "d";
this.dataGridView1.Columns["CustomerName"].DefaultCellStyle
.Alignment = DataGridViewContentAlignment.MiddleRight;
this.dataGridView1.DefaultCellStyle.NullValue = "no entry";
this.dataGridView1.DefaultCellStyle.WrapMode =
DataGridViewTriState.True;
}
(15)单元格样式
DataGridView 控件内的每个单元格都可以有自己的样式,如文本格式、背景色、前景色和字体。但是,多个单元格通常会共享特定的样式特征。
|
三、常用方法
AutoResizeColumns |
已重载。 调整所有列的宽度以适应其单元格的内容。 |
SelectAll |
选择 DataGridView 中的所有单元格。 |
GetNextControl |
按照子控件的 Tab 键顺序向前或向后检索下一个控件。 (继承自 Control。) |
|
|
四、常用事件
CellEnter |
在 DataGridView 控件中的当前单元格更改或者该控件接收到输入焦点时发生。 |
CellFormatting |
在单元格的内容需要设置格式以便于显示时发生。 |
CellLeave |
在单元格失去输入焦点因而不再是当前单元格时发生。 |
CellMouseDoubleClick |
在双击 DataGridView 中的单元格时发生。 |
CellMouseClick |
在用户用鼠标单击单元格中的任何位置时发生。 |
CellParsing |
在单元格值已修改的情况下,当单元格退出编辑模式时发生。 |
DataBindingComplete |
在数据绑定操作完成之后发生。 |
|
|
五、常用属性 |
|
AutoGenerateColumns |
获取或设置一个值,该值指示在设置 DataSource 或 DataMember 属性时是否自动创建列。 |
AllowUserToAddRows |
获取或设置一个值,该值指示是否向用户显示添加行的选项。 |
AllowUserToDeleteRows |
获取或设置一个值,该值指示是否允许用户从 DataGridView 中删除行。 |
AllowUserToOrderColumns |
获取或设置一个值,该值指示是否允许通过手动对列重新定位。 |
AllowUserToResizeColumns |
获取或设置一个值,该值指示用户是否可以调整列的大小。 |
AllowUserToResizeRows |
获取或设置一个值,该值指示用户是否可以调整行的大小。 |
Columns |
获取一个包含控件中所有列的集合。 |
ColumnHeadersVisible |
获取或设置一个值,该值指示是否显示列标题行。 |
CurrentCell |
获取或设置当前处于活动状态的单元格。 |
CurrentCellAddress |
获取当前处于活动状态的单元格的行索引和列索引。 |
CurrentRow |
获取包含当前单元格的行。 |
DataBindings |
为该控件获取数据绑定。【Get】 |
DataMember |
获取或设置数据源中 DataGridView 显示其数据的列表或表的名称。 |
DataSource |
获取或设置 DataGridView 所显示数据的数据源。 |
DefaultCellStyle |
在未设置其他单元格样式属性的情况下,获取或设置应用于 DataGridView 中的单元格的默认单元格样式。 |
Rows |
获取一个集合,该集合包含 DataGridView 控件中的所有行。 |
SelectedCells |
获取用户选定的单元格的集合。 |
SelectedColumns |
获取用户选定的列的集合。 |
SelectedRows |
获取用户选定的行的集合。 |
|
|