| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 | using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.Data.SqlClient;namespace СУБД_Агентство{    public partial class FormFindLeven : Form    {        public FormFindLeven()        {            InitializeComponent();                    }        int levenshtein(string t1, string t2)        {            // разница в количестве символов в проверяемых строках            int lev = Math.Abs(t1.Length - t2.Length);            // минимальная длина из длин двух строк            int minlen = Math.Min(t1.Length, t2.Length);            // перебор символов от нулевого и до последнего более короткой строки            for (int i = 0; i <= minlen-1; i++)                // если i-е символы не совпали, то сосчитать их                if (t1[i] != t2[i]) lev++;            return lev;        }                // структура данных для хранения фамилии и имени        struct user        {            public string fam, name;        }        // список с фамилиями и именами клиентов        List<user> lst = new List<user>();        public int type;        private void FormFindLeven_Load(object sender, EventArgs e)        {            // объект для подключения к базе данных            SqlConnection con = new SqlConnection(Form1.txtcon);            con.Open();  // открыть подключение            string txtsql = @"select fam, namefrom Userswhere type = " + type;            // SQL-запрос для извлечения из БД списка пользователей            SqlCommand query1 = new SqlCommand(txtsql, con);            // выполнить запрос и сохранить результат запроса            SqlDataReader rez = query1.ExecuteReader();            // если есть строки в результате запроса            if (rez.HasRows)            {                // прочитать очередную строку из результата запроса                // выполнять цикл до тех пор, пока не достигли последней записи в таблице                // с результатами запроса                while(rez.Read())                {                    user u1;                    // новый элемент для списка пользователей                    u1.fam = rez["fam"].ToString(); u1.name = rez["name"].ToString();                    lst.Add(u1);  // добавить в список очередного пользователя                    // вывести данные очередного пользователя в таблицу                    dgvUsers.Rows.Add(u1.fam, u1.name);                }            }            con.Close();  // закрыть подключение        }        private void btnFind_Click(object sender, EventArgs e)        {            dgvUsers.Rows.Clear();  // очистить таблицу            // перебор пользователей в списке            foreach (user u1 in lst)            {                // если выполняется поиск по фамилии и фамилия пользователя не превышает 3 по расстоянию Левенштейна с символами для поиска, или выполняется поиск по имени и имя пользователя не превышает 3 по расстоянию Левенштейна с символами для поиска, ...                if (rbtFam.Checked && levenshtein(u1.fam, tbxFind.Text) <= 3 ||                    rbtName.Checked && levenshtein(u1.name, tbxFind.Text) <= 3)                    // вывести в DataGridView такого пользователя                    dgvUsers.Rows.Add(u1.fam, u1.name);            }        }        private void dgvUsers_CellContentClick(object sender, DataGridViewCellEventArgs e)        {        }        private void btnShowAll_Click(object sender, EventArgs e)        {            dgvUsers.Rows.Clear();  // очистить таблицу            // перебор пользователей в списке            foreach (user u1 in lst)            {                // вывести в DataGridView пользователя                dgvUsers.Rows.Add(u1.fam, u1.name);            }        }    }}
 |