Um.
If you want to load a DataTable, then you don't want to do it in a loop...
And you shouldn't be concatenating strings to form SQL statements, it's very, very dangerous - it means a user can damage or destroy your database just by typing in the text boxes. You should always use a parameterised query instead.
Try using a DataAdapter instead of a DataReader.
And the other reason it doesn't work is probably that the date doesn't work either - because SQL doesn't know what date format your user is entering data in, so assuming your user doesn't make any mistakes, it can still interpret it wrongly.
So, start by checking the date he entered - if it's valid, convert it to a DateTime value, if it isn't complain and do no more. (Or by preference, use a DateTimePicker control instead of a textbox, and use the Value property directly - it will always be a valid DateTime)
Then use a DataAdapter with a parameterised query:
using (SqlConnection con = new SqlConnection(strConnect))
{
con.Open();
SqlDataAdapter da = new SqlDataAdapter("SELECT FullName,datein,remarks FROM QAttendance WHERE SubjDesc = @SUBJ AND datein= @DATE", con);
da.SelectCommand.Parameters.AddWithValue("@SUBJ", cBsubject.Text);
da.SelectCommand.Parameters.AddWithValue("@DATE", userDateTimeValue);
DataTable dt = new DataTable();
da.Fill(dt);
dtgviewatt.DataSource = dt;
}
You should find it works.