I would agree that checking the Row Count can prevent the issue you are getting. You could actually rewrite your code to this:
protected void ddlAllEngineerSolver_SelectedIndexChanged(object sender, EventArgs e){
DataView productsTable = (DataView)
SqlDataSourceAssignedComplains.Select(DataSourceSelectArguments.Empty);
productsTable.RowFilter = string.Format("EngName = '{0}'",
ddlAllEngineerSolver.SelectedItem);
DataTable dtResult = productsTable.ToTable();
if (dtResult.Rows.Count > 0)
{
GridView1.DataSource = dtResult
GridView1.DataBind();
}
else{
}
}