void CleanMatchingRows(SignatureCounterDataSet.SignatureRow row_signature)
        {
            var query_matching =
                from matching in tables.MatchingTableAdapter.GetData()
                where matching.SignatureID == row_signature.ID
                select matching;

            foreach (var matching in query_matching)
                tables.MatchingTableAdapter.Delete(matching.ID);
        }
        void AddSignature(SignatureCounterDataSet.ImageFileRow row_image, SignatureCounterDataSet.TypeRow row_type)
        {
            var query_ids = from signature in tables.SignatureTableAdapter.GetData() select signature.ID;
            int id = query_ids.Any() ? query_ids.Max() + 1 : 0;

            var query_last_added =
                from signature in tables.SignatureTableAdapter.GetData()
                join trimming in tables.TrimTableAdapter.GetData() on signature.TrimID equals trimming.ID
                where signature.TypeID == row_type.ID
                orderby signature.ID
                select new { Signature = signature, Trimming = trimming };
            int trim_id;
            if (query_last_added.Any())
            {
                SignatureCounterDataSet.TrimRow t = query_last_added.Last().Trimming;
                signatureCounterDataSet1.Signature.Clear();
                trim_id = AddTrimming(t.x, t.y, t.w, t.h);
            }
            else
            {
                signatureCounterDataSet1.Signature.Clear();
                trim_id = AddTrimming(10, 10, 100, 100);
            }

            tables.SignatureTableAdapter.Insert(id, row_image.ID, trim_id, row_type.ID, null, false);
        }
            public GuessRowForDataGridView(SignatureCounterDataSet.SignatureRow signature, SignatureCounterDataSet.TrimRow trimming, SignatureCounterDataSet.ImageFileRow image)
            {
                try
                {
                    System.Drawing.Image original_image = System.Drawing.Image.FromFile(image.FullPath);
                    double zoom = new double[] { max_width / trimming.w, max_height / trimming.h }.Min();
                    Bitmap trimmed = new Bitmap((int)(trimming.w * zoom), (int)(trimming.h * zoom));
                    Graphics g = Graphics.FromImage(trimmed);
                    g.DrawImage(original_image, new Rectangle(new Point(0, 0), trimmed.Size), (Rectangle)trimming, GraphicsUnit.Pixel);
                    SignatureImage = trimmed;
                }
                catch (Exception e)
                {
                    //TODO
                }

                ApplyToTrailer = false;
                Assessments = new List<AssessmentCapsule>();
                SignatureID = signature.ID;
                ImageFileID = image.ID;
                TrimID = trimming.ID;
            }