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 lst = new List(); public int type; private void FormFindLeven_Load(object sender, EventArgs e) { // объект для подключения к базе данных SqlConnection con = new SqlConnection(Form1.txtcon); con.Open(); // открыть подключение string txtsql = @" select fam, name from Users where 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); } } } }