如何修复错误从用户控件中的主窗体获取数据?
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 < 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以上是关于如何修复错误从用户控件中的主窗体获取数据?的主要内容,如果未能解决你的问题,请参考以下文章
.NET Winform 自定义分页控件如何在父窗体中调用?