If you want to insert all rows in a single batch, try:
Dim sb As New StringBuilder("INSERT INTO ItemMaster (D_Id, DNo, DName, PCS, Weight) VALUES ")
Dim list As New List(Of SqlParameter)
list.Add(New SqlParameter("@D_Id", TextBox3.Text))
For rw As Integer = 0 To DataGridView1.Rows.Count - 1
If rw <> 0 Then sb.Append(", ")
sb.AppendFormat("(@D_Id, @DNo_{0}, @DName_{0}, @PCS_{0}, @Weight_{0})", rw)
list.Add(New SqlParameter("@DNo_" & rw, DataGridView1.Rows(rw).Cells(1).Value))
list.Add(New SqlParameter("@DName_" & rw, DataGridView1.Rows(rw).Cells(2).Value))
list.Add(New SqlParameter("@PCS_" & rw, DataGridView1.Rows(rw).Cells(3).Value))
list.Add(New SqlParameter("@Weight_" & rw, DataGridView1.Rows(rw).Cells(4).Value))
Next
If dal.execute(sb.ToString(), list) Then
MsgBox("Data inserted successfully")
Else
MsgBox("Error inserting data")
End If