Hi StackOverflow members, I decided to build a library project to improve myself. I created a class to code Book Operations but i couldn’t find out how to fill datagrid via class method. When i text this method into a button action it didn’t work. I found out a solution to make it happen. And here’s some code from my BookOperation class;
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 is the name of my application screen of book operations. In the button action, it includes;
Kitap_islemleri ki = new Kitap_islemleri(); ki.GetBookByName(this);
is it okay for single responsibility or is there any different way? Can you please help me? That’s kind of weird using somemethod(this), is it wrong or good for a start? what do you think. How can i get data without using (this)? If there’s a way, can you hit it?
Advertisement
Answer
I suggest you to change your method parameters and return type with what you need. It seems your queries need just 1 criteria.
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; }
So you won’t need all the Yonetici page on your data access layer and with returned DataTable, you can bind it to your gridview on presentation layer.
var bookName = f1.textBox1.Text; f1.dataGridView1.DataSource = ki.GetBookByName(bookname);
Part 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; }
Usage
GetBooks("Kitap_Adi", "name"); GetBooks("Yazar", "author"); GetBooks("Tür", "kind")