c#如果触发了DataError,则获取单元格文本值

时间:2013-07-17 10:14:31

标签: c# datagridview

我有一个DataGridView,我通过以下代码从我的数据库中动态填充它

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

如您所见,我有一个Date列。当我尝试编辑该列的单元格并键入无效格式时,将触发DataError事件。

现在我只想从

获取错误文本
private void dtgvLoadEx_DataError(object sender, DataGridViewDataErrorEventArgs e) {

}

或任何其他过程以获取错误文本。

3 个答案:

答案 0 :(得分:3)

您希望使用以下事件参数

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;
}

编辑。阅读下面的评论,如果上面的第一个没有返回错误的striing值,那么它可能是不可能的。请尝试使用ErrorText代替。

我希望这会有所帮助。

答案 1 :(得分:3)

好的我已经解决了这个问题。在这里,我要分享它

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

答案 2 :(得分:1)

您可以使用CellValidating事件进行自定义验证:

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