我有一个usercontrol,我在其中添加/更新数据并将其保存到数据库,我希望数据网格使用我的方法refreshDVG1()正确刷新;
public void refreshDVG1()
{
try
{
dataGridView1.CurrentCell.Selected = this.dataGridView1[0, 0].Selected;
datset.Clear();
sda.Fill(datset);
dataGridView1.Refresh();
if (dataGridView1.RowCount < 1)
{
datset.Clear();
string row = "NO items found";
datset.Rows.Add(row);
}
}
catch(Exception ex)
{
MessageBox.Show("" + ex);
}
}`
但它似乎没有工作,并试图在datagridview的同一用户控件上的按钮上使用该方法,它工作正常,所以我不知道为什么我得到一个错误,因为我收到的错误是我收到了一个nullrefernce对象或一些东西......我是c#的新手,所以我很讨厌这个问题我希望你能帮我解决这个问题
更新代码,请注意,这是来自不同的usercontrol,并且两个usercontrol都在同一个表单上
<br><i>private void UpdateAcc_Click(object sender, EventArgs e)
{
SuspendLayout();
using (MySqlConnection conn = new MySqlConnection(myConnection))
{
string query = "UPDATE `deqor`.`users` SET `first_name`=?name, `middle_name`=?mname, `last_name`=?lname WHERE `userid`=?para;";
conn.Open();
using (MySqlCommand cmd = new MySqlCommand(query, conn))
{
try
{
cmd.Parameters.AddWithValue("?name", Fname.Text);
cmd.Parameters.AddWithValue("?mname", Mname.Text);
cmd.Parameters.AddWithValue("?lname", Lname.Text);
cmd.Parameters.AddWithValue("?para", manageACC.staticNumData);
cmd.ExecuteNonQuery();
MessageBox.Show("success");
//MainForm main = Form.ActiveForm as MainForm;
manageACC main1 = this.Parent.Parent.Parent.Parent as manageACC;
main1.refreshDVG1();
}
catch (Exception ex)
{
MessageBox.Show("error" + ex);
}
}
conn.Close();
}
ResumeLayout();
}
答案 0 :(得分:1)
有不同的方法来实现这种方法,其中之一是你可以在第二个usercontrol上创建Event并在单击按钮时引发它,然后在表单容器句柄中该事件并在处理程序中调用第一个UserControl方法。 另一种方法是你可以在第二个方法中传递第一个UserControl并直接调用该方法。
您可以在this place
中找到其他解决方案这取决于您的代码,archticture和项目结构。无法回答您的问题。
如果您想找到最佳解决方案,可以添加更多详细信息。
public partial class edit : UserControl
{
public EventHandler DataUpdated;
}
private void UpdateAcc_Click(object sender, EventArgs e)
{
// Saving Data In DB
//MainForm main = Form.ActiveForm as MainForm;
//manageACC main1 = this.Parent.Parent.Parent.Parent as manageACC;
//main1.refreshDVG1();
//Instead of commented code raise the event
if(DataUpdated != null)
DataUpdated(this, System.eventArgs.Empty);
}
然后在主窗体代码后面处理DataUpdated事件:
//edit1 imagine is id of second usercontrol instance
edit1.DataUpdated += (s,e) =>
{
//you have usercontrol1 instance here, so just call method directly here
//manageACC1imagine is id of first usercontrol instance
manageACC1.refreshDVG1();
}