勇哥注: 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怎么进行动态赋值
见勇哥的这篇文章:
http://www.skcircle.com/?id=1971
(六)单元格怎么同时判断即不是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
版权声明:本文为博主原创文章,转载请附上博文链接!


少有人走的路


















