2016-01-04 47 views
1

我有一个由列表填充的DataTable(它是从csv文件填充的,虽然不是很重要)。该DataTable由DataGridView呈现,并允许用户对其进行编辑。当用户试图编辑它时,验证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; 
     } 
    } 
+0

你就不能让这个字段'ReadOnly'? – jHilscher

+0

CellValidating检查仍然对其进行验证,即使认为该单元格为只读: dgvDeliveryCosts.Columns [0] .ReadOnly = true; –

回答

0

添加在column index检查:

private void dgvDeliveryCosts_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) 
{ 
    if (e.ColumnIndex == 0) // zero-based 
    { 
      return; 
    } 

    // Validate.. 
+0

谢谢你,完美的工作! –

相关问题