DataGridView C#编辑模式值编辑后的格式
问题描述:
我在C#Winform项目中有一个datagridview。这个datagridview用于将值插入到数据库中。每个列匹配一个相应的数据库列。DataGridView C#编辑模式值编辑后的格式
其中一列是DateTime列。我想'验证'这个日期,以确保它的格式正确。理想情况下,您将离开单元格,并将其转换为我选择的日期时间格式。
我已经使用了一系列事件来尝试创建此功能,但一直存在问题。我一直存在的问题是,当事件触发时,值尚未存储在单元格中。因此,当我为例子做这样的事情:
private void Grid_Modify_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if (Grid_Modify.Columns[e.ColumnIndex].Name == "DateTime")
{
Grid_Modify[e.ColumnIndex, e.RowIndex].Value =
Convert.ToDateTime(Grid_Modify[e.ColumnIndex, e.RowIndex].Value).ToString("YYYY-MM-DD hh:mm:ss");
}
}
问题是,它被转换为datetime值是原来的单元格的值 - 不是我刚刚进入新的价值。我认为这是因为事件在单元格值更新之前触发。
问题是:当我更改其值时,格式化日期的最佳方法是什么?
我尝试过的其他事件是:CellLeave,CellValueChanged,CellValidated和CellEndEdit。
注意:CellValueChanged事件是实际上可以获取新单元格值的唯一事件,但是,当我更改事件处理程序中的值时,它会陷入无限循环中。
答
最简单的将是回到CellValueChanged事件处理程序,并使用全局变量,以避免您的无限循环:
private bool _inCellValueChanged = false;
然后,在CellValueChanged:
if (!_inCellValueChanged && Grid_Modify.Columns[e.ColumnIndex].Name == "DateTime")
{
_inCellValueChanged = true;
Grid_Modify[e.ColumnIndex, e.RowIndex].Value = Convert.ToDateTime(Grid_Modify[e.ColumnIndex, e.RowIndex].Value).ToString("YYYY-MM-DD hh:mm:ss");
_inCellValueChanged = false;
}
我怕我会必须去那样的东西.. – ImGreg 2012-03-21 00:03:54
我有相关的问题是,当我输入一个新的时间值时,即使他们被称为“时间列”TimeColumns默认为当前日期,所有可见的是时间DateTime的一部分,以及所有用户可以编辑的是时间部分。这是一个务实的解决方案。 – mickeyf 2016-11-08 22:33:56