The grid does not throw this exception, and so does not really know what column caused it. It is your datasource that is throwing this exception.
If you want to try to handle this from a grid event, try catching the CurrentCellAcceptChangesFailed event. There you can get a reference to the exception that was thrown, and from there parse the exception text and get the column that way. I think you would have to have a case for each exception you wanted to handle.
private void gridDataBoundGrid1_CurrentCellConfirmChangesFailed(object sender, EventArgs e)
{
GridCurrentCell cc = this.gridDataBoundGrid1.CurrentCell;
switch (cc.Exception.GetType().ToString())
{
case "System.Data.NoNullAllowedException":
{
int start = cc.ErrorMessage.IndexOf("''");
if(start > -1)
{
int end = cc.ErrorMessage.IndexOf("''", start + 1);
if(end > -1)
{
string colName = cc.ErrorMessage.Substring(start + 1, end - start - 1);
Console.WriteLine(colName);
}
}
}
break;
}
}