2013-07-17 54 views
6

Tôi có một DataGridView và tôi cư nó tự động từ cơ sở dữ liệu của tôi qua đoạn mã sauC# Lấy giá trị văn bản di động nếu DataError được kích hoạt

DataGridViewTextBoxColumn colID = new DataGridViewTextBoxColumn(); 
colID.HeaderText = "id"; 
colID.DataPropertyName = "id"; 
colID.ReadOnly = true; 
colID.Visible = false; 
dtgvLoadEx.Columns.Add(colID); 

DataGridViewTextBoxColumn colLoadExpiryDate = new DataGridViewTextBoxColumn(); 
//CalendarColumn colLoadExpiryDate = new CalendarColumn(); 
colLoadExpiryDate.HeaderText = "LoadExpiryDate(mm/dd/yy)"; 
colLoadExpiryDate.Width = 158; 
colLoadExpiryDate.DataPropertyName = "LoadExpiryDate"; 
colLoadExpiryDate.ReadOnly = false; 
colLoadExpiryDate.MaxInputLength = 10; 
dtgvLoadEx.Columns.Add(colLoadExpiryDate); 

dtgvLoadEx.DataSource = data(); //Return data table from my Database 

Như bạn có thể thấy tôi có một cột Date. Khi tôi cố chỉnh sửa ô của cột đó và nhập định dạng không hợp lệ, sự kiện DataError sẽ được kích hoạt.

Bây giờ tôi chỉ muốn nhận được văn bản lỗi từ

private void dtgvLoadEx_DataError(object sender, DataGridViewDataErrorEventArgs e) { 

} 

hoặc bất kỳ quá trình khác để có được nội dung lỗi.

+0

Làm thế nào để bạn tăng lỗi khi nhập văn bản không hợp lệ? – MoonKnight

+2

ví dụ tôi chèn vào cột này "2023123", nó sẽ kích hoạt sự kiện _DataError. Bây giờ tôi chỉ muốn nhận được rằng "2023123" – user2530833

+0

Loại ngoại lệ nào trong e.Exception? – sq33G

Trả lời

3

kẻ Ok tôi đã giải quyết được vấn đề. Ở đây tôi sẽ chia sẻ nó

private void dtgvLoadEx_DataError(object sender, DataGridViewDataErrorEventArgs e) 
     { 
      string s = dtgvLoadEx.EditingControl.Text; 
     } 
+0

Cảm ơn tác phẩm này Hoàn hảo. – user2530833

3

Bạn muốn sử dụng đối số sự kiện như sau

string errorText; 
private void dataGridView_DataError(object sender, DataGridViewDataErrorEventArgs e) 
{ 
    // This will return the last text entry that was not erroneous. 
    string cellValue = dataGridView[e.ColumnIndex, e.RowIndex].Value.ToString(); 

    // This will get the text indicating the error condition. 
    errorText = dataGridView[e.ColumnIndex, e.RowIndex].ErrorText; 
} 

Edit. Sau khi đọc bình luận của bạn dưới đây, nếu lần đầu tiên ở trên không trả lại giá trị đánh dấu sai, thì có thể là không thể. Hãy thử sử dụng ErrorText để thay thế.

Tôi hy vọng điều này sẽ hữu ích.

+0

Tất nhiên bạn nên làm điều gì đó với chuỗi s ... –

+1

Tôi thử điều này nhưng nó trả về giá trị trước đó của datagridview. Nó không trả về giá trị lỗi. – user2530833

+0

Xem chỉnh sửa của tôi. – MoonKnight

1

Bạn có thể làm một sự kiện CellValidating xác nhận tùy chỉnh sử dụng:

private void dataGridView_CellValidating(object sender, 
DataGridViewCellValidatingEventArgs e) 
{ 
    if (!DateTime.TryParse(e.FormattedValue)) 
    { 
     string s = e.FormattedValue; 
     e.Cancel = true; 
    } 
} 
+0

+1 tùy chọn tốt ... – MoonKnight