代表在触发WinForms事件后无法工作

时间:2017-12-20 13:12:51

标签: c# winforms events delegates

我刚接触 WinForms 。因此,我会尝试提供尽可能多的详细信息来解释我的问题。很抱歉遗漏了任何内容,如果您需要其他详细信息,请随时询问。

基本想法是在按下按钮"返回" DataTable 从字典返回到 DataGridView 。 >为此我假设我必须使用代表。我开始了解它们并卡在某个地方,但不确切知道在哪里。

我有2个班级:

  • 1个类是发布者GUI_Mapping,我在其中声明了委托,事件并引发了这样的事件:

     namespace Mapping.Forms {
     public delegate DataTable returnDataTableHandler(object sender, GetDataTableIntoDictionary e); 
    
     public partial class GUI_Mapping : Form {
     public GetDataTableIntoDictionary returnDGVObj = new GetDataTableIntoDictionary();
     public event returnDataTableHandler BackButtonWasPressed;
    
     protected virtual void OnBackButtonWasPressed()
     {
         if (BackButtonWasPressed != null)
             BackButtonWasPressed(this, new GetDataTableIntoDictionary());
     }
      private void btnBackFromFunctionsMapping_Click(object sender, EventArgs e)
    {
        OnBackButtonWasPressed();
    }
    
  • 第二个类是 GetDataTableIntoDictionary ,它从字典中返回一个dataTable:

    public class GetDataTableIntoDictionary: EventArgs
      {
       public DataTable ReturnDataTableByKey(object sender, EventArgs e)
       {
    
        if (dictionaryDGVdatatable.ContainsKey("mappingName"))
        {
            return dictionaryDGVdatatable["mappingName"];
        }
            return null;
      }
    }
    

我不确定我做错了什么,因为我可以在DataGridView中收到dataTable。 有人可以查看我的代码并解释我错过的内容。我很感激。

更新1(GetDataTableIntoDictionary的完整代码)

public class GetDataTableIntoDictionary: EventArgs
    {

        static Dictionary<string, DataTable> dictionaryDGVdatatable = new Dictionary<string, DataTable>();
        private DataTable dt;



        public static void StoreCurrentData(DataGridView dgwDisplayData, string mappingLayerName)
        {
            DataTable dt = new DataTable();
            dt = GetCurrentDataTable.GetDataTableFromDGV(dgwDisplayData);

            var ds = new List<dynamic>();

            if (dt == null)
            {
                //do nothing
            }

            AddDataTableToDictionary(mappingLayerName,dt);
        }

        private static void AddDataTableToDictionary(string mappingLayerName, DataTable dt)
        {
            if(dt != null)
            dictionaryDGVdatatable.Add(mappingLayerName, dt);
        }

        public DataTable ReturnDataTableByKey(object sender, EventArgs e)
        {

            if (dictionaryDGVdatatable.ContainsKey("mappingLayerName"))
            {
                return dictionaryDGVdatatable["mappingLayerName"];
            }
                return null;
        }


    }
}

0 个答案:

没有答案