public static bool FillClimbersRP(int team, SqlConnection cn, SqlTransaction _tran = null, IWin32Window owner = null, string sClimbersWhere = "")
        {
            if (cn.State != ConnectionState.Open)
            {
                cn.Open();
            }
            SqlCommand cmd = new SqlCommand();

            cmd.Connection  = cn;
            cmd.Transaction = _tran == null?cn.BeginTransaction() : _tran;

            bool scs = false;

            try
            {
                cmd.CommandText = "SELECT iid, LTRIM(RTRIM(P.surname + ' ' + P.name)) climber_name," +
                                  "       LTRIM(RTRIM(P.name_ord)) name_ord" +
                                  "  FROM Participants P(NOLOCK)" +
                                  " WHERE P.team_id = " + team.ToString() + sClimbersWhere +
                                  " ORDER BY climber_name";
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataTable      dt = new DataTable();
                da.Fill(dt);
                foreach (DataRow drr in dt.Rows)
                {
                    if (String.IsNullOrEmpty(drr["name_ord"].ToString()))
                    {
                        drr["name_ord"] = GetParticipantOrdName(Convert.ToInt32(drr["iid"]), cn, cmd.Transaction);
                    }
                }
                TableDataChange dcTable = new TableDataChange("Проверьте ФИО участников в родительном падеже",
                                                              dt, "Фамилия, Имя", "ФИО в род.падеже");
                DialogResult dr;
                if (owner == null)
                {
                    dr = dcTable.ShowDialog();
                }
                else
                {
                    dr = dcTable.ShowDialog(owner);
                }
                if (dr == DialogResult.No || dr == DialogResult.Cancel || !dcTable.IsOK)
                {
                    return(false);
                }
                cmd.CommandText = "UPDATE Participants SET name_ord = @oname WHERE iid = @iid";
                cmd.Parameters.Add("@oname", SqlDbType.VarChar, 255);
                cmd.Parameters.Add("@iid", SqlDbType.Int);
                foreach (DataRow row in dcTable.Table.Rows)
                {
                    cmd.Parameters[0].Value = row["name_ord"];
                    cmd.Parameters[1].Value = row["iid"];
                    cmd.ExecuteNonQuery();
                }
                scs = true;
            }
            finally
            {
                if (_tran == null)
                {
                    if (scs)
                    {
                        cmd.Transaction.Commit();
                    }
                    else
                    {
                        cmd.Transaction.Rollback();
                    }
                }
            }
            return(scs);
        }
        public static int[] CreateClimbersListForOrders(int team, SqlConnection cn, SqlTransaction _tran = null, IWin32Window owner = null, int[] initSrc = null)
        {
            List <int> chk = new List <int>();

            if (initSrc != null)
            {
                foreach (var n in initSrc)
                {
                    chk.Add(n);
                }
            }
            if (cn.State != ConnectionState.Open)
            {
                cn.Open();
            }
            SqlCommand cmd = new SqlCommand();

            cmd.Connection = cn;
            bool scs = false;

            cmd.Transaction = _tran == null?cn.BeginTransaction() : _tran;

            try
            {
                bool      needLoop;
                DataTable dcTRES;
                do
                {
                    needLoop        = false;
                    cmd.CommandText = "SELECT P.iid, P.surname +' ' + P.name clm_name," +
                                      "       CONVERT(BIT,0) has_order," +
                                      "       O.order_number" +
                                      "  FROM Participants P(nolock)" +
                                      " LEFT JOIN orders O(nolock) ON O.climber_id = P.iid" +
                                      " WHERE P.team_id = " + team.ToString() +
                                      " ORDER BY O.order_number, P.surname, P.name";
                    DataTable      dt = new DataTable();
                    SqlDataAdapter da = new SqlDataAdapter(cmd);
                    da.Fill(dt);
                    foreach (DataRow dr in dt.Rows)
                    {
                        if (chk.Contains(Convert.ToInt32(dr["iid"])))
                        {
                            dr["has_order"] = true;
                        }
                    }
                    TableDataChange dcT = new TableDataChange("Настройка ордеров", dt, "Фамилия, Имя", "Печать", "Номер ордера", true);
                    dcT.btnDelSelectedOrders.Visible = true;
                    DialogResult dgRes;
                    if (owner == null)
                    {
                        dgRes = dcT.ShowDialog();
                    }
                    else
                    {
                        dgRes = dcT.ShowDialog(owner);
                    }
                    dcTRES = dcT.Table;
                    if (dgRes == DialogResult.Cancel || dgRes == DialogResult.No)
                    {
                        return(null);
                    }
                    if (dgRes == DialogResult.Abort) //Удаление ордеров
                    {
                        DropSelectedOrders(cmd, dcTRES);
                        needLoop = true;
                    }
                } while (needLoop);
                DropSelectedOrders(cmd, dcTRES);
                List <int> resList = new List <int>();
                foreach (DataRow dr in dcTRES.Rows)
                {
                    if (Convert.ToBoolean(dr["has_order"]))
                    {
                        resList.Add(Convert.ToInt32(dr["iid"]));
                    }
                }
                scs = true;
                return(resList.ToArray());
            }
            finally
            {
                if (_tran == null)
                {
                    if (scs)
                    {
                        cmd.Transaction.Commit();
                    }
                    else
                    {
                        cmd.Transaction.Rollback();
                    }
                }
            }
        }
        public static bool FillAdditionalTeams(int climberID, SqlConnection cn, SqlTransaction _tran = null, IWin32Window owner = null)
        {
            if (cn.State != ConnectionState.Open)
            {
                cn.Open();
            }
            SqlCommand cmd = new SqlCommand();

            cmd.Connection  = cn;
            cmd.Transaction = _tran == null?cn.BeginTransaction() : _tran;

            bool scs = false;

            try
            {
                cmd.CommandText = "SELECT p.surname + ' ' + p.name FROM Participants P(nolock) WHERE P.iid = @climberID";
                cmd.Parameters.Add("@climberID", SqlDbType.Int);
                cmd.Parameters[0].Value = climberID;
                string clmName = cmd.ExecuteScalar() as string;
                if (clmName == null)
                {
                    clmName = String.Empty;
                }
                else
                {
                    clmName = clmName.Trim().ToUpper();
                }
                cmd.CommandText = "SELECT T.iid, T.name, CONVERT(BIT," +
                                  "       CASE WHEN TL.iid IS NULL THEN 0 ELSE 1 END) has_value" +
                                  "  FROM Teams T(nolock)" +
                                  " LEFT JOIN teamsLink TL(nolock) on TL.team_id = T.iid" +
                                  "                           and TL.climber_id = @climberID" +
                                  " WHERE T.iid <> (SELECT P.team_id" +
                                  "                   FROM Participants P(nolock)" +
                                  "                  WHERE P.iid = @climberID)" +
                                  " ORDER BY T.name";
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataTable      dt = new DataTable();
                da.Fill(dt);
                TableDataChange dcTable = new TableDataChange(clmName + ": дополнительные команды",
                                                              dt, "Команда", "Использовать");
                DialogResult dr;
                if (owner == null)
                {
                    dr = dcTable.ShowDialog();
                }
                else
                {
                    dr = dcTable.ShowDialog(owner);
                }
                if (dr == DialogResult.No || dr == DialogResult.Cancel || !dcTable.IsOK)
                {
                    return(false);
                }
                string cmdYes = @"IF NOT EXISTS(SELECT 1
                                                  FROM teamsLink(NOLOCK)
                                                 WHERE team_id = @teamID
                                                   AND climber_id = @climberID) BEGIN
                                    INSERT INTO teamsLink(team_id, climber_id) VALUES (@teamID, @climberID)
                                  END;";
                string cmdNo  = "DELETE FROM teamsLink WHERE team_id = @teamID AND climber_id = @climberID";
                cmd.Parameters.Add("@teamID", SqlDbType.Int);
                foreach (DataRow drr in dcTable.Table.Rows)
                {
                    cmd.Parameters[1].Value = drr["iid"];
                    cmd.CommandText         = Convert.ToBoolean(drr["has_value"]) ? cmdYes : cmdNo;
                    cmd.ExecuteNonQuery();
                }
                scs = true;
            }
            finally
            {
                if (_tran == null)
                {
                    if (scs)
                    {
                        cmd.Transaction.Commit();
                    }
                    else
                    {
                        cmd.Transaction.Rollback();
                    }
                }
            }
            return(scs);
        }