簡體   English   中英

如何從usecontrol調用方法到另一個usercontrol?

[英]how do i call a method from a usecontrol to a another usercontrol?

我有一個用戶控件,可以在其中添加/更新數據並將其保存到數據庫中,並且我希望datagrid使用我的方法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的同一用戶控件上的按鈕上使用該方法嘗試過,並且工作正常,所以我不知道為什么我收到錯誤是因為我收到的是null引用對象或某事..我是C#的新手,所以我請把這個弄亂

更新代碼,請注意,這是來自不同的用戶控件,並且兩個用戶控件的格式相同

<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();
        }

有多種方法可以實現此方法,其中一種是您可以在第二個usercontrol上創建Event並在單擊按鈕時將其引發,然后在表單容器中處理該事件,並在處理程序中調用第一個UserControl方法。 您可以通過另一種方式在第二個中傳遞第一個UserControl並直接調用該方法。

您可以在這個地方找到另一個解決方案

這取決於您的代碼,架構和項目結構。 無法為您的問題提供答案。

如果您想找到最佳解決方案,則可以添加更多詳細信息。

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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM