在验证过程中更改DataGrid单元值
问题描述:
我连接我的应用程序的“百分比”列使用的值小于1(即15%在数据库中存储为0.15),所以我使用Format =“.00%”以显示DataGrid列中的值。在验证过程中更改DataGrid单元值
问题是如何正确让用户插入大于1的值 - 即在单元格中写入50或50% - 并将其转换为数据库中的0,5。
我一直在寻找DataGridViewCellValidatingEventHandler并添加事件levDGV_PercentCellValidating,但我不知道如何改变这些值...
private void levDGV_PercentCellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
string dataPropertyName = levDGV.Columns[e.ColumnIndex].DataPropertyName; // deliveryProcent
// Abort validation if cell is not in the "deliveryProcent" column.
if (!dataPropertyName.Equals("deliveryProcent")) return;
levDGV.Rows[e.RowIndex].ErrorText = "";
string testValue = e.FormattedValue.ToString();
char lastChar = testValue[testValue.Length - 1];
if (lastChar == (char)37)
{
//TODO: Remove % character from entered string
}
//TODO: divide the value by 100 and set as currentCell value
}
如何输入的值转换到正确验证一个(除以100 )?
答
离开他人的解决方案,解析这似乎为我工作:
private void levDGV_CellParsing(object sender, DataGridViewCellParsingEventArgs e)
{
string dataPropertyName = levDGV.Columns[e.ColumnIndex].DataPropertyName;
if (dataPropertyName.Equals("deliveryProcent"))
{
if (e.Value != null)
{
try
{
string testValueStr = e.Value.ToString();
char lastChar = testValueStr[testValueStr.Length - 1];
if (lastChar == (char)37)
{
//Remove % character from entered string
testValueStr = testValueStr.Substring(0, testValueStr.Length - 1);
}
//divide the value by 100 and set as currentCell value
double testValue = (Convert.ToDouble(testValueStr))/100;
e.Value = testValue;
e.ParsingApplied = true;
}
catch (FormatException)
{
// Set to false in case another CellParsing handler
// wants to try to parse this DataGridViewCellParsingEventArgs instance.
e.ParsingApplied = false;
}
}
}
}
看完这个:https://stackoverflow.com/questions/4742960/datagridview-validation-changing-cell-value我想我会去参加CellParsing ... – mallorn