C# DatagridView заполняется классом SingleResponsibility - PullRequest
0 голосов
/ 27 мая 2020

Привет, участники StackOverflow, я решил создать проект библиотеки, чтобы улучшить себя. Я создал класс для кодирования операций с книгами, но не мог понять, как заполнить сетку данных с помощью метода класса. Когда я отправляю этот метод в действие кнопки, он не работает. Я нашел решение, как это сделать. А вот код из моего класса BookOperation:

public void GetBookByName(Yönetici f1)
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand("Select * from Kitaplar where Kitap_Adi like '%" + f1.textBox1.Text.Trim() + "%'", conn); 
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        f1.dataGridView1.DataSource = dt;
        conn.Close();
    }
    public void GetBookByAuthor(Yönetici f1)
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand("Select * from kitaplar where Yazar like '%" + f1.textBox1.Text.Trim() + "%'", conn);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        f1.dataGridView1.DataSource = dt;
        conn.Close();

    }
    public void GetBookByGenre(Yönetici f1)
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand("Select * from kitaplar where Tür like '%" + f1.textBox1.Text.Trim() + "%'", conn);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        f1.dataGridView1.DataSource = dt;
        conn.Close();
    }

Yönetici - это имя экрана моего приложения для операций с книгами. В действии кнопки он включает:

Kitap_islemleri ki = new Kitap_islemleri();
ki.GetBookByName(this);

это нормально для единоличной ответственности или есть другой способ? Не могли бы вы мне помочь? Странно использовать какой-то метод (этот), это неправильно или хорошо для начала? что ты думаешь. Как я могу получить данные без использования (этого)? Если есть способ, можешь ударить его?

1 Ответ

0 голосов
/ 27 мая 2020

Я предлагаю вам изменить параметры вашего метода и тип возвращаемого значения на то, что вам нужно. Кажется, вашим запросам нужен всего 1 критерий.

public DataTable GetBookByName(string bookName)
{
    conn.Open();
    SqlCommand cmd = new SqlCommand("Select * from Kitaplar where Kitap_Adi like '%" + bookName.Trim() + "%'", conn); 
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataTable dt = new DataTable();
    da.Fill(dt);
    conn.Close();
    return dt;
}

Таким образом, вам не понадобится вся страница Yonetici на вашем уровне доступа к данным, а с возвращенным DataTable вы можете привязать ее к вашему gridview на уровне презентации.

var bookName = f1.textBox1.Text;
f1.dataGridView1.DataSource = ki.GetBookByName(bookname);

Часть 2

public DataTable GetBooks(string filter, string criteria)
{
conn.Open();
SqlCommand cmd = new SqlCommand("Select * from Kitaplar where " + filter + " like '%" + criteria.Trim() + "%'", conn); 
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
conn.Close();
return dt;
}

Использование

GetBooks("Kitap_Adi", "name");
GetBooks("Yazar", "author");
GetBooks("Tür", "kind")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...