C# 在用户尝试编辑DataGridView单元格时验证该单元格

C# 在用户尝试编辑DataGridView单元格时验证该单元格,c#,validation,datagridview,datatable,C#,Validation,Datagridview,Datatable,我有一个由列表填充的数据表(这些列表是从csv文件填充的,虽然不是很重要)。此DataTable由DataGridView呈现,允许用户对其进行编辑 // Initialise DataTable DataTable dt = new DataTable(); // Add columns to DataTable dt.Columns.Add("Weight Category"); dt.Columns.Add(

我有一个由列表填充的数据表(这些列表是从csv文件填充的,虽然不是很重要)。此DataTable由DataGridView呈现,允许用户对其进行编辑

        // Initialise DataTable
        DataTable dt = new DataTable();

        // Add columns to DataTable
        dt.Columns.Add("Weight Category");
        dt.Columns.Add("United Kingdom");
        dt.Columns.Add("Rest of Europe");
        dt.Columns.Add("World Wide");

        // Add rows to DataTable
        dt.Rows.Add(weightCategory[0], ukCosts[0], roeCosts[0], wwCosts[0]);
        dt.Rows.Add(weightCategory[1], ukCosts[1], roeCosts[1], wwCosts[1]);
        dt.Rows.Add(weightCategory[2], ukCosts[2], roeCosts[2], wwCosts[2]);
        dt.Rows.Add(weightCategory[3], ukCosts[3], roeCosts[3], wwCosts[3]);
        dt.Rows.Add(weightCategory[4], ukCosts[4], roeCosts[4], wwCosts[4]);
        dt.Rows.Add(weightCategory[5], ukCosts[5], roeCosts[5], wwCosts[5]);

        return dt;
然后,更改将保存到原始csv文件中。我想验证单元格,以便用户只能键入数字/1个小数点。我目前使用以下CellValidating事件来执行此操作,该事件阻止用户离开单元格。问题是我的第一列包含文本。此列是只读的,我根本不希望对其进行验证,是否有任何方法可以跳过/取消验证?否则我就无法离开那些牢房了

    private void dgvDeliveryCosts_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
    {
        double output;

        if (!double.TryParse(e.FormattedValue.ToString(), out output))
        {
            MessageBox.Show("Please enter a numeric value.");
            e.Cancel = true;
        }

        if (string.IsNullOrEmpty(e.FormattedValue.ToString()))
        {
            MessageBox.Show("Cell cannot be left blank.");
            e.Cancel = true;
        }
    }
在以下位置添加一个复选框:

在以下位置添加一个复选框:


您不能将此列设置为只读吗?即使单元格是只读的,CellValidating检查仍会对其进行验证:dgvDeliveryCosts.Columns[0]。ReadOnly=true;您不能将此列设置为只读吗?即使单元格是只读的,CellValidating检查仍会对其进行验证:dgvDeliveryCosts.Columns[0]。ReadOnly=true;
private void dgvDeliveryCosts_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
    if (e.ColumnIndex == 0) // zero-based
    { 
          return;
    }

    // Validate..