勇哥注: C#的 DataGridView控件功能强大。许多知识点会常用常忘记,在这里做个记录吧,以方便查询。 阅读此文需要你对此控件有初步的认识。 另外一点,不要以为它只是用于显示数据的表格,要打破这种认知。
未完待续。。。。
(十) DataGridViewButtonColumn 怎么设置显示内容。2022/11/16 添加:
DataGridViewButtonColumn 是按钮项。用下面的代码显示内容。
if (win1.ConditionAndActionCount > 0) { this.DgvFlowTreeConfig.Rows[e.RowIndex].Cells[9].Value = "..."; } else { this.DgvFlowTreeConfig.Rows[e.RowIndex].Cells[9].Value = ""; }
(九)读取下拉框选择的内容不是更新内容的问题 2022/11/16 添加:
如下图所示:
下拉框选择回原点运动,点击后面的配置按钮,取得的还是之前的“点到点运动”
这是因为下拉框虽然选择了,但是没结束编辑。
解决方法是使用下面:
var wayName = Convert.ToString(DgvFlowTreeConfig.Rows[e.RowIndex].Cells[7].EditedFormattedValue);
而不是使用下面:
var wayName = Convert.ToString(DgvFlowTreeConfig.Rows[e.RowIndex].Cells[7].Value);
EditedFormattedValue属性的意思是:
获取该单元格的当前格式化值,而不考虑该单元格是否处于编辑模式,也不论是否尚未提交此值
(八)当设置为整行选择后,发现ctrl+c复制的是整行的内容,而不是我们选中的内容
参考下面这个设置就可以了。
datagridview1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; datagridview1.ClipboardCopyMode = DataGridViewClipboardCopyMode.Disable; datagridview1.MultiSelect = false;
此问题网上还有一篇说明,见下面:
https://qa.1r1g.com/sf/ask/1502889321/
(七)DataGridViewComboBoxColumn怎么进行动态赋值
见勇哥的这篇文章:
(六)单元格怎么同时判断即不是null,也不是空串
不要使用 dataGridViewX1.Rows[e.RowIndex].Cells["txt"].Value.toString();
因为object为空时用.toString()会出错,切记!!!
可以使用Convert.ToString(dataGridViewX1.Rows[e.RowIndex].Cells["txt"].Value)来转换
var cardName = Convert.ToString(dataGridView1.Rows[e.RowIndex].Cells[0].Value); if(cardName.Length>0) { }
(五)想要显示ComboBox列的内容需要点击两到三次才可以的问题。
此问题严重影响操作体验。
可以在CellEnter事件中加入下面的代码:
private void DgvActionConfigData_CellEnter(object sender, DataGridViewCellEventArgs e) { DataGridView dgv = sender as DataGridView; if (dgv != null) { if (dgv.Columns[e.ColumnIndex].Name == "combo" && dgv.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn) { SendKeys.Send("{F4}"); //选中ComboBox列时,相当于按了键盘的F4键 } } }
(四) 去掉第一列; 第一列显示行号
第一列指的是下图所示位置:
取消第一列的代码:
dataGridView1.RowHeadersVisible = false;//隐藏第一列
你也可以把第一列显示行号。
在事件RowStateChanged中加入下面代码。
private void dataGridView1_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e) { e.Row.HeaderCell.Value = string.Format("{0}", e.Row.Index + 1); }
如果显示行号不全的话。
可以设置下面的属性为AutoSizeToDisplayedHeaders
显示行号的效果如下:
(三) 选择整行
如下设置:
整行是:FullRowSelect
其它几种都是字面意思。
代码表示为:
this.dataGridView1.SelectionMode =DataGridViewSelectionMode.FullRowSelect;
(二)更新带DataGridViewComboBoxCell的行
因此内容是个列表,所以需要特殊的方法更新。
下面代码中的combox变量,就是这个目的。
并且DgvFlowTreeConfig.Rows.Add这一行中添加的内容也是有作用的,它是做为选中的值。(“点到点运动”)
private void updateFlowItemDgv(List<DgvFlowItemConfig> data,string whichFlow) { DgvFlowTreeConfig.Rows.Clear(); for (int i=0;i<data.Count;i++) { if (whichFlow != data[i].WhichFlowName) continue; var motionObjName = data[i].MotionObj.ToString(); var sonObjName = data[i].SonObjList.getCommaString(); var selMotionMethodName = data[i].SelMotionMethod; var itemNotes = data[i].ItemNote; DgvFlowTreeConfig.Rows.Add(new object[] {"","","", motionObjName,"", sonObjName, selMotionMethodName ,"","","", itemNotes }); var combox = ((DataGridViewComboBoxCell)DgvFlowTreeConfig.Rows[i].Cells[6]); combox.Items.Clear(); combox.Items.AddRange(data[i].MotionMethodList.ToArray()); } }
(一)怎么设置文字显示大小
点击控件属性找到Defaultcellstyle后点击右侧三个小点
用代码写如下:
dataGridView1.DefaultCellStyle.Font = new Font("隶书",15);
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

