Refer below sample code for your reference and Implement it in your code as per your code logic.
C#
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.BindGrid();
}
private void BindGrid()
{
DataTable dt = new DataTable();
// Add Blank Row.
dt.Rows.Add();
//dt.Rows.Add();
dataGridView1.DataSource = dt;
DataGridViewTextBoxColumn textBoxColumn = new DataGridViewTextBoxColumn();
textBoxColumn.HeaderText = "Amount";
textBoxColumn.Width = 50;
textBoxColumn.Name = "Amount";
dataGridView1.Columns.Insert(0, textBoxColumn);
DataGridViewTextBoxColumn textDescription = new DataGridViewTextBoxColumn();
textDescription.HeaderText = "Description";
textDescription.Width = 50;
textDescription.Name = "Description";
dataGridView1.Columns.Insert(1, textDescription);
DataGridViewTextBoxColumn txtDateofBirth = new DataGridViewTextBoxColumn();
txtDateofBirth.HeaderText = "Date of Birth";
txtDateofBirth.Width = 50;
txtDateofBirth.Name = "DateofBirth";
dataGridView1.Columns.Insert(2, txtDateofBirth);
}
private void itemID_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsControl(e.KeyChar)
&& !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
{
e.Handled = true;
}
// only allow one decimal point
if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1)
{
e.Handled = true;
}
}
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
e.Control.KeyPress -= new KeyPressEventHandler(itemID_KeyPress);
e.Control.KeyPress -= new KeyPressEventHandler(ItemDescription_KeyPressCharecterOnly);
if (dataGridView1.CurrentCell.ColumnIndex == dataGridView1.Columns["Amount"].Index)
{
TextBox itemID = e.Control as TextBox;
if (itemID != null)
{
itemID.KeyPress += new KeyPressEventHandler(itemID_KeyPress);
}
}
if (dataGridView1.CurrentCell.ColumnIndex == dataGridView1.Columns["Description"].Index)
{
TextBox ItemDescription = e.Control as TextBox;
if (ItemDescription != null)
{
ItemDescription.KeyPress += new KeyPressEventHandler(ItemDescription_KeyPressCharecterOnly);
}
}
}
private void ItemDescription_KeyPressCharecterOnly(object sender, KeyPressEventArgs e)
{
if (!char.IsLetter(e.KeyChar) && !char.IsWhiteSpace(e.KeyChar) && e.KeyChar != '.' && e.KeyChar != '\b')
{
e.Handled = true;
}
}
private void BtnCheck_Click(object sender, EventArgs e)
{
//Validation
if (ValidateDataGridDetails())
{
//Saving code
}
}
private bool ValidateDataGridDetails()
{
bool status = true;
bool IsInValid = false;
bool IsAmountEmpty = false;
bool IsDescriptionEmpty = false;
for (int i = 0; i < dataGridView1.Rows.Count ; i++)
{
string amount = Convert.ToString(dataGridView1.Rows[i].Cells["Amount"].Value);
string description = Convert.ToString(dataGridView1.Rows[i].Cells["Description"].Value);
if (string.IsNullOrEmpty(amount))
{
IsAmountEmpty = true;
break;
}
if (string.IsNullOrEmpty(description))
{
IsDescriptionEmpty = true;
break;
}
string dateOfBirth = Convert.ToString(dataGridView1.Rows[i].Cells["DateofBirth"].Value);
Regex reg = new Regex(@"^(\d{1,2})/(\d{1,2})/(\d{4})$");
Match m = reg.Match(dateOfBirth);
DateTime dob;
DateTimeFormatInfo info = new DateTimeFormatInfo();
info.ShortDatePattern = "dd/MM/yyyy";
DateTime.TryParse(dateOfBirth, info, DateTimeStyles.None, out dob);
if (m.Success)
{
IsInValid = dob == DateTime.MinValue || dob > DateTime.Now;
}
else { IsInValid = true; break; }
if (IsInValid)
{ break; }
}
if (IsAmountEmpty)
{
MessageBox.Show("Fill Amount Details.", "Invalid Amount", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
status = false;
}
else if (IsDescriptionEmpty)
{
MessageBox.Show("Fill Description Details.", "Invalid Descrption", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
status = false;
}
if (IsInValid)
{
MessageBox.Show("Invalid Date of Birth.", "Invalid date", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
status = false;
}
return status;
}
}
VB.Net
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Me.BindGrid()
End Sub
Private Sub BindGrid()
Dim dt As DataTable = New DataTable()
dt.Rows.Add()
dataGridView1.DataSource = dt
Dim textBoxColumn As DataGridViewTextBoxColumn = New DataGridViewTextBoxColumn()
textBoxColumn.HeaderText = "Amount"
textBoxColumn.Width = 50
textBoxColumn.Name = "Amount"
dataGridView1.Columns.Insert(0, textBoxColumn)
Dim textDescription As DataGridViewTextBoxColumn = New DataGridViewTextBoxColumn()
textDescription.HeaderText = "Description"
textDescription.Width = 50
textDescription.Name = "Description"
dataGridView1.Columns.Insert(1, textDescription)
Dim txtDateofBirth As DataGridViewTextBoxColumn = New DataGridViewTextBoxColumn()
txtDateofBirth.HeaderText = "Date of Birth"
txtDateofBirth.Width = 50
txtDateofBirth.Name = "DateofBirth"
dataGridView1.Columns.Insert(2, txtDateofBirth)
End Sub
Private Sub itemID_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs)
If Not Char.IsControl(e.KeyChar) AndAlso Not Char.IsDigit(e.KeyChar) AndAlso e.KeyChar <> "."c Then
e.Handled = True
End If
If e.KeyChar = "."c AndAlso (TryCast(sender, TextBox)).Text.IndexOf("."c) > -1 Then
e.Handled = True
End If
End Sub
Private Sub dataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs) Handles dataGridView1.EditingControlShowing
RemoveHandler e.Control.KeyPress, AddressOf itemID_KeyPress
RemoveHandler e.Control.KeyPress, AddressOf ItemDescription_KeyPressCharecterOnly
If dataGridView1.CurrentCell.ColumnIndex = dataGridView1.Columns("Amount").Index Then
Dim itemID As TextBox = TryCast(e.Control, TextBox)
If itemID IsNot Nothing Then
AddHandler itemID.KeyPress, AddressOf itemID_KeyPress
End If
End If
If dataGridView1.CurrentCell.ColumnIndex = dataGridView1.Columns("Description").Index Then
Dim ItemDescription As TextBox = TryCast(e.Control, TextBox)
If ItemDescription IsNot Nothing Then
AddHandler ItemDescription.KeyPress, AddressOf ItemDescription_KeyPressCharecterOnly
End If
End If
End Sub
Private Sub ItemDescription_KeyPressCharecterOnly(ByVal sender As Object, ByVal e As KeyPressEventArgs)
If Not Char.IsLetter(e.KeyChar) AndAlso Not Char.IsWhiteSpace(e.KeyChar) AndAlso e.KeyChar <> "."c AndAlso e.KeyChar <> vbBack Then
e.Handled = True
End If
End Sub
Private Function ValidateDataGridDetails() As Boolean
Dim status As Boolean = True
Dim IsInValid As Boolean = False
Dim IsAmountEmpty As Boolean = False
Dim IsDescriptionEmpty As Boolean = False
For i As Integer = 0 To dataGridView1.Rows.Count - 1
Dim amount As String = Convert.ToString(dataGridView1.Rows(i).Cells("Amount").Value)
Dim description As String = Convert.ToString(dataGridView1.Rows(i).Cells("Description").Value)
If String.IsNullOrEmpty(amount) Then
IsAmountEmpty = True
Exit For
End If
If String.IsNullOrEmpty(description) Then
IsDescriptionEmpty = True
Exit For
End If
Dim dateOfBirth As String = Convert.ToString(dataGridView1.Rows(i).Cells("DateofBirth").Value)
Dim reg As Regex = New Regex("^(\d{1,2})/(\d{1,2})/(\d{4})$")
Dim m As Match = reg.Match(dateOfBirth)
Dim dob As DateTime
Dim info As DateTimeFormatInfo = New DateTimeFormatInfo()
info.ShortDatePattern = "dd/MM/yyyy"
DateTime.TryParse(dateOfBirth, info, DateTimeStyles.None, dob)
If m.Success Then
IsInValid = dob = DateTime.MinValue OrElse dob > DateTime.Now
Else
IsInValid = True
Exit For
End If
If IsInValid Then
Exit For
End If
Next
If IsAmountEmpty Then
MessageBox.Show("Fill Amount Details.", "Invalid Amount", MessageBoxButtons.OKCancel, MessageBoxIcon.[Error])
status = False
ElseIf IsDescriptionEmpty Then
MessageBox.Show("Fill Description Details.", "Invalid Descrption", MessageBoxButtons.OKCancel, MessageBoxIcon.[Error])
status = False
End If
If IsInValid Then
MessageBox.Show("Invalid Date of Birth.", "Invalid date", MessageBoxButtons.OKCancel, MessageBoxIcon.[Error])
status = False
End If
Return status
End Function
Private Sub BtnCheck_Click(ByVal sender As Object, ByVal e As EventArgs) Handles BtnCheck.Click
If ValidateDataGridDetails() Then
End If
End Sub
Screenshot
