2013-01-05 36 views
5

Tôi có một ứng dụng biểu mẫu cửa sổ có chứa một khung nhìn dữ liệu. Tôi cần phải thực thi xác nhận ô trên các ô datagridview để nó không chấp nhận các giá trị âm. Tôi tìm thấy một mã thích hợp cho nó từ thư viện msdn.Xác nhận cho các giá trị ô Datagridview trong C#

private void dataGridView1_CellValidating(object sender, 
DataGridViewCellValidatingEventArgs e) 
{ 
dataGridView1.Rows[e.RowIndex].ErrorText = ""; 
int newInteger; 

// Don't try to validate the 'new row' until finished 
// editing since there 
// is not any point in validating its initial value. 
if (dataGridView1.Rows[e.RowIndex].IsNewRow) { return; } 
if (!int.TryParse(e.FormattedValue.ToString(), 
    out newInteger) || newInteger < 0) 
{ 
    e.Cancel = true; 
    dataGridView1.Rows[e.RowIndex].ErrorText = "the value must be a Positive integer"; 
} 
} 

Thật không may mã chỉ cho phép số nguyên được nhập trong chế độ xem dữ liệu. Vì tôi có một tên cột là "Tên mục" được cho là được nhập dưới dạng văn bản, có một vấn đề trong mã. Nó tạo ra một thông báo lỗi khi tôi gõ vào tên của item.The phần còn lại của các xác nhận ô là hoàn toàn làm việc! Làm thế nào tôi phải chỉnh sửa mã để nó không tạo ra lỗi này?

Cảm ơn trước

Mirfath

Trả lời

4

DataGridViewCellValidatingEventArgse có một tài sản mà bạn có thể kiểm tra để đảm bảo xác nhận chỉ được thực hiện trên cột bạn muốn .ColIndex.

private void dataGridView1_CellValidating(object sender, 
DataGridViewCellValidatingEventArgs e) { 
    if (e.ColIndex == dataGridView1.Columns["MyNumericColumnName"].Index) { 
     dataGridView1.Rows[e.RowIndex].ErrorText = ""; 
     int newInteger; 

     // Don't try to validate the 'new row' until finished 
     // editing since there 
     // is not any point in validating its initial value. 
     if (dataGridView1.Rows[e.RowIndex].IsNewRow) { return; } 
     if (!int.TryParse(e.FormattedValue.ToString(), 
      out newInteger) || newInteger < 0) 
     { 
      e.Cancel = true; 
      dataGridView1.Rows[e.RowIndex].ErrorText = "the value must be a Positive integer"; 
     } 
    } 
} 
0

hãy thử cái này và tìm ra.

private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) 
    { 
     if (dataGridView1.IsCurrentCellDirty) 
     { 
      if (e.ColumnIndex == 0) //<-Column for String 
      { 
       Console.WriteLine(dataGridView1[e.ColumnIndex, e.RowIndex].EditedFormattedValue.ToString()); 
       //Your Logic here 
      } 
      if (e.ColumnIndex == 1) //<-Column for Integer 
      { 
       Console.WriteLine(dataGridView1[e.ColumnIndex, e.RowIndex].EditedFormattedValue.ToString()); 
       //Your Logic here 
      } 
     } 
    } 
Các vấn đề liên quan