如何修复错误从用户控件中的主窗体获取数据?

Posted

技术标签:

【中文标题】如何修复错误从用户控件中的主窗体获取数据?【英文标题】:How to fix error get data from main form in user control? 【发布时间】:2022-01-16 16:34:10 【问题描述】:

我已经创建了一个小表单和一个用户控件,但是我不知道如何将数据从数据库的一侧传递到另一个用户控件,按照网上的一些教程,我使用了 (get;set ) 像这样配对。这个:

IN 主窗体

string query = @"select t.Ma_Nvu,t.Ten_Nvu,t.Time_Start,t.Time_End,d.Noi_dung from ToDoList_ListNvu t
                left join ToDoList_NoiDungNvu d on t.Ma_Nvu = d.Ma_Nvu
                where t.Status like N'Chưa hoàn thành'";
        dt = (new Data()).executeQuery(query);
        if (dt.Rows.Count == 0) 
        
            MessageBox.Show("Bạn cần tạo nhiệm vụ trước để vào !", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        
        else
        
            ProcessToDoList tdl = new ProcessToDoList();
            BunifuTransition trans = new BunifuTransition();
            this.PageToDoList.Controls.Add(tdl);
            tdl.Location = new Point(0, 0);
            tdl.Size = new Size(0, 567);
            if (tdl.Width == 0)
            
                tdl.Width = 1014;
                trans.ShowSync(tdl, false, Bunifu.UI.WinForms.BunifuAnimatorNS.Animation.HorizBlind);
                tdl.BringToFront();
            
            foreach (DataRow dr in dt.Rows)
            
                DataList data = new DataList();
                data.Name = dr["Ten_Nvu"].ToString();
                data.Time_Start = dr["Time_Start"].ToString();
                data.Time_End = dr["Time_End"].ToString();
                data.Noi_Dung = dr["Noi_dung"].ToString();
                dtaAdd.Add(data);
            
            int i = 0;
            while (i < dt.Rows.Count)
            
                tdl.Name_Nvu = dtaAdd[i].Name;
                tdl.Noi_dung = dtaAdd[i].Noi_Dung;
                tdl.Time_Start = dtaAdd[i].Time_Start;
                tdl.Time_End = dtaAdd[i].Time_End;
                if (tdl.CheckOut()==true)
                
                    i++;
                
            

在用户控件中

public string Name_Nvu
    
        get  return _name; 
        set  _name = value; 
    
    public string Noi_dung
    
        get return _noidung ; 
        set _noidung = value; 
    
    public string Time_Start
    
        get  return _timestart; 
        set  _timestart = value; 
    
    public string Time_End
    
        get  return _timeend; 
        set  _timeend = value; 
    

但它不起作用。不知道哪里出错了,所以想请教一下大家如何将数据从表单传递到用户控件。

【问题讨论】:

什么错误? 说它是一个错误是夸大其词,但是当我运行我的程序时,用户控件端的值为空,并且没有从表单端接收到值。 最后一个……while (i &lt; dt.Rows.Count) ………在某种意义上看起来很奇怪,因为只有一 (1) 个tdl 对象,而while 循环似乎正在改变“相同”@ 的属性987654326@对象一遍又一遍……如果这是故意的,那么简单地抓住表格中的最后一行会不会更容易……? … 如果 tdl.CheckOut() 曾经返回 false,你将得到一个无限循环,除非它最终会在输入上的相同集合返回 true 最初我打算在 UserControl 端获取数据,但每次我调用它们时,它们都必须连接到数据库,这使我的表单非常沉重。我想出了一个这样的想法。 【参考方案1】:

我不确定您收到什么错误消息,但是可以通过这种方式将值从您的表单传递到您的 UC。

在你的User Control:

  private string _name;
  [Category("Custom Props")]
  public string custom_name
  
     get  return _name; 
     set  _name = value; 
  

然后在您的form 中,您可以通过执行以下操作为用户控件中的_name 字符串赋值:

   myUC test = new myUC(); //Your user control
   test.custom_name = dtaAdd[i].Name; 
   panel1.Controls.Add(test);

【讨论】:

当我运行它时它似乎不适用于我的程序,它总是返回 null

以上是关于如何修复错误从用户控件中的主窗体获取数据?的主要内容,如果未能解决你的问题,请参考以下文章

c# winform 如何取得用户控件中 的值

.NET Winform 自定义分页控件如何在父窗体中调用?

c#如何创建/设置windows窗体用户控件属性获取简单消息弹窗

如何修复用户控件中的闪烁

将数据加载到变量用户表单和控件中

如何重新访问之前在子控件中声明的用户控件?