大家好,
首先,我要提前感谢所有花时间浏览这篇冗长文章的人。
上下文:我正在使用windows窗体和csharp构建一个简单的gui界面,该界面连接到mysql数据库以执行crud操作。
问题:我正在尝试实现一个方法,该方法将把必需的mysql代码元素作为参数,并将表拉入数据网格视图。我已经产生了两个方法-一个接受参数,另一个是硬编码来提取数据。
拉数据后,我可以插入/修改数据库中的任何记录与保存按钮的方法。问题是,当我使用带参数的方法将数据拉入网格视图时,当我得到一个 null
引用错误。但是当使用硬编码方法时,我没有得到任何 null
出错,一切正常。因为某种原因 sqlData
以及 dataTable
在网格视图中填充了基于最终作为参数的方法之后,变量被传递给save button方法 null
. 有开发这些应用程序经验的Maven有什么建议吗?
将数据拉入网格视图的硬编码方法:
private void fill_grid_view1(string sequelQueryString)
{
using (MySqlConnection mysqlConn = new MySqlConnection(db_connection))
{
mysqlConn.Open();
sqlData = new MySqlDataAdapter(sequelQueryString, mysqlConn);
sqlCommandBuilder = new MySqlCommandBuilder(sqlData);
dataTable = new DataTable();
sqlData.Fill(dataTable);
dataGridView1.DataSource = dataTable;
}
}
保存按钮方法:
private void bttnSave_Click(object sender, EventArgs e)
{
save_changes_refresh(sqlData, dataTable);
}
private void save_changes_refresh(MySqlDataAdapter given_data_adapter, DataTable given_data_table)
{
try
{
given_data_adapter.Update(given_data_table);
select_both_user_tweet();
MessageBox.Show("Your changes have been saved successfully!"); //
}
catch (Exception errobj)
{
MessageBox.Show(errobj.Message.ToString());
}
}
我要使用的方法基于给定参数将数据拉入网格视图:
private void fill_given_grid_view (string sequelQueryString, MySqlDataAdapter given_data_adapter, DataTable given_data_table, DataGridView given_grid_view,
MySqlCommandBuilder given_builder)
{
using (MySqlConnection mysqlConn = new MySqlConnection(db_connection))
{
mysqlConn.Open();
given_data_adapter = new MySqlDataAdapter(sequelQueryString, mysqlConn);
given_builder = new MySqlCommandBuilder(given_data_adapter);
given_data_table = new DataTable();
given_data_adapter.Fill(given_data_table);
given_grid_view.DataSource = given_data_table;
}
}
新方法所做的就是基于参数拉取数据,这样如果我有5个datagridview元素,我就不需要像在第一个代码片段中那样分别硬编码所有5个拉取方法。它工作,但它不让我保存任何更改,如上面提到的,因为 sqlData
以及 dataTable
当我尝试执行save方法时,变量最终为null。
将所需参数传递给 fill_given_grid_view
:
private void view_users_Click(object sender, EventArgs e)
{
fill_given_grid_view("SELECT * FROM new_schema.user", sqlData, dataTable, dataGridView1, sqlCommandBuilder);
}
edit:我已经阅读了可能的重复线程,它是有用的,但是我很难理解为什么本质上使用两个方法来做相同的事情,其中一个会丢弃 sqlData
以及 dataTable
将变量设置为null,并且第一个代码段中的硬编码方法不会删除变量,并保留传递到save方法中所需的值。
1条答案
按热度按时间raogr8fs1#
基于@reniuz的建议
fill_given_grid_view
以及save_changes_refresh
方法必须重写才能接受dataGridView
以及sequelQueryString
作为论据。sqlData
以及dataTable
变量不会在任何地方用作方法的输入。代码示例如下:基于输入将数据拉入网格视图的方法:
将用网格视图和续集字符串重写的方法另存为参数: