【发布时间】:2020-09-14 09:38:12
【问题描述】:
您好 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);
单一责任可以吗,还是有什么不同的方式?你能帮我么? 使用 somemethod(this) 有点奇怪,一开始是错的还是好的?你怎么看。我如何在不使用(this)的情况下获取数据?如果有办法,你能打到吗?
【问题讨论】:
-
你的方法应该返回一个 DataTable,而不是接收一个 Form 引用并设置一个 UI 控件(你的方法应该对 UI 组件一无所知)。无论出于何种目的,您都可以在表单方面使用返回的数据。旁注:您正在存储一个 Connection 对象(您应该创建一个并就地处理它)而不是处理 SqlDataAdapter,它可以自行打开一个连接,顺便说一句。
-
你能举个例子吗?
-
关于如何写
public DataTable GetBookByName() { }和f1.dataGridView1.DataSource = GetBookByName();而不是public void GetBookByName(Yönetici f1)? BTW2,您只需要一种方法来返回带有您的书籍的 DataTable。过滤和排序可以在 UI 端动态应用(与 UI 要求相关),使用 DataTable.defaultView 或 BindingSource。 -
我改了 GetBookByName(string text,DataGridView dgv) 我猜它已经解决了
-
不。不要将任何 UI 元素传递给这些方法。
标签: c# sql winforms class datagridview