绑定数据源
1.绑定模式(绑定数据库)。现在没用到。
2.非绑定模式。dataGridView.DataSource
dataGridView1.DataSource = NonBindSource();
//该函数返回一个表格数据
private DataTable NonBindSource()
{
DataTable mydt = new DataTable();
mydt.Columns.Add("0x00", Type.GetType("System.String")); //列名称
mydt.Columns.Add("0x02", Type.GetType("System.String"));
mydt.Columns.Add("0x04", Type.GetType("System.String"));
mydt.Columns.Add("0x06", Type.GetType("System.String"));
mydt.Columns.Add("0x08", Type.GetType("System.String"));
mydt.Columns.Add("0x0A", Type.GetType("System.String"));
mydt.Columns.Add("0x0C", Type.GetType("System.String"));
mydt.Columns.Add("0x0E", Type.GetType("System.String"));
for (int i = 1; i < 16; i++)
{
DataRow mydr = mydt.NewRow();
for (int k = 0; k < 8; k++)
{
mydr[k] = 0; //填充数据
}
mydt.Rows.Add(mydr);
}
return mydt;
}
3.绘制行序号
1.实例化一个“DataTable ”类 “mydt”。在“mydt”中添加行序号。把“mydt”传递给“DataGridView”。“DataGridView”即添加了行序号。
2.修改HeaderCell属性
dataGridView3.Rows[i].HeaderCell.Value = "P"+ ((mypage-1) * 10 + i).ToString("D4");
5.修改单元格的值
1.首先要知道单元格的位置,单元格的位置是通过两个属性定位的Rows 行 Column 列,它们的索引都是从0开始的。
dataGridView1.Rows[rowIndex].Cells[columnIndex].Value = myint.ToString();
2.通过属性 CurrentCell 锁定当前活动单元格。
dataGridView1.CurrentCell.Value = "1";
6.行高列宽自适应(自适应受限于标题的长度)
1)行标题列的宽度指定
dataGridView3.RowHeadersWidth = 85;
2)行高度自适应
此属性可以配置该控件,使行高度自动调整以适应其内容的内容更改时。
dataGridView1.AutoSizeRowsMode =DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders;
3)列宽度自适应
此属性可以配置该控件,以便以填充该控件,或以适应单元格内容自动调整列宽。
dataGridView3.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader;
自动适应有如下几种方式:
增加行,增加列。冻结行,冻结列。删除行
1)增加行
DataGridViewRow dr = new DataGridViewRow();
dr.CreateCells(dgvVouchers);
//添加的行作为第一行
dgvVouchers.Rows.Insert(0, dr);
//添加的行作为最后一行
dgvVouchers.Rows.Add(dr_new);
2)增加列
DataGridViewTextBoxColumn acCode = new DataGridViewTextBoxColumn();
acCode.Name = "acCode";
acCode.DataPropertyName = "acCode";
acCode.HeaderText = "A/C Code";
dgvVouchers.Columns.Add(acCode);
3) 列冻结
DataGridViewColumn.Frozen 属性为 True 时, 该列左侧的所有列被固定,横向滚动时固定列不随滚动条滚动而左右移动。这对于重要列固定显示很有用。
// DataGridView1的左侧2列固定
DataGridView1.Columns[1].Frozen = true;
但是,DataGridView.AllowUserToOrderColumns = True 时,固定列不能移动到非固定列,反之亦然。
4) 行冻结
DataGridViewRow.Frozen 属性为 True 时, 该行上面的所有行被固定, 纵向滚动时固定行不随滚动条滚动而上下移动。
// DataGridView1 的上3行固定
DataGridView1.Rows[2].Frozen = true;
5)删除行
dataGridView2.Rows.RemoveAt(16);
ConTextMenuStrip
datagridview绑定contextmenustrip,右键菜单栏
利用 CellContextMenuStripNeeded 事件可以设定单元格的右键菜单,尤其但需要右键菜单根据单元格值的变化而变化的时候。比起使用循环遍历,使用该事件来设定右键菜单的效率更高。但是,在DataGridView使用了DataSource绑定而且是VirtualMode的时候,该事件将不被引发。
//自己的方法
private void DataGridView3_CellContextMenuStripNeeded(object sender, DataGridViewCellContextMenuStripNeededEventArgs e)
{
e.ContextMenuStrip = this.ctMenuSDATA;//提前设置的ContextMenustrip控件
}
//网上的方法
[C#]
// CellContextMenuStripNeeded事件处理方法
private void DataGridView1_CellContextMenuStripNeeded(object sender,
DataGridViewCellContextMenuStripNeededEventArgs e)
{
DataGridView dgv = (DataGridView)sender;
if (e.RowIndex < 0)
{
// 列头的ContextMenuStrip设定
e.ContextMenuStrip = this.ContextMenuStrip1;
}
else if (e.ColumnIndex < 0)
{
// 行头的ContextMenuStrip设定
e.ContextMenuStrip = this.ContextMenuStrip2;
}
else if (dgv[e.ColumnIndex, e.RowIndex].Value is int)
{
// 如果单元格值是整数时
e.ContextMenuStrip = this.ContextMenuStrip3;
}
}
右键修改当前选中单元为0,0。(可以扩展到设置当前单元格为选定单元格)
DataGridView1.CurrentCell = DataGridView1[0, 0];
右键菜单事件
在ContextMenuStrip菜单下button的click事件内捕获当前选定单元格。
双击修改单元格内容EditCellOnEnter
CellValueChanged //事件