foreach (DataRow dr in ds.Tables["Login"].Rows)
{
textBox1.Text = dr["Id"].ToString();
textBox2.Text = dr["username"].ToString();
textBox3.Text = dr["u_password"].ToString();
textBox4.Text = dr["exp"].ToString();
textBox5.Text = dr["salary"].ToString();
SqlCommandBuilder builder = new SqlCommandBuilder(adpt);
}
这就是我目前所拥有的。显然,这只是一个较小范围的解决方法,对于整个管理系统来说效率不够。
您可以采用以下方法:
public static IEnumerable<TControl> GetChildControl<TControl>(this Control control) where TControl : Control
{
if(control.Controls == null)
Enumerable.Empty<TControl>();
var children = control.Controls.OfType<TControl>();
return children.SelectMany(ctrl => GetChildControl<TControl>(ctrl)).Concat(children);
}
所以上面的方法基本上会为特定的控件做递归,例如Textbox
。因此,您将按以下方式使用:
var fields = this.GetChildControl<TControl>(Textbox);
foreach(var item in fields)
{
// You would have some conditional, or map to an attribute or some property
// identifier, to automatically map the value to an object directly.
}
因此,一旦您将属性名称或属性与实际控件名称进行比较,或者您可以自动映射的名称。但是,请记住这一点。取决于您希望访问的控件。你可能会得到大量的循环。通过所有控件和属性。这可能会严重影响您的表现。所以要小心,在 Web Forms 中我使用了类似的映射技术,递归发现了太多的控件,以至于它变成了一个大循环来迭代,这使得页面变慢。
额外警告,这是很多反思。由于额外的复杂性,一些开发人员不喜欢它。
一些非常好的问题存在于不同的方法中,或者类似的方法可以实现这一点。希望这为您指明了正确的方向。显然,一旦你有了一个对象,你就可以使用 ORM 或 Micro ORM 来快速访问数据库。
小巧玲珑的例子:
dbConnection.ExecuteQuery<Sample>(getSampleQuery);
我相信这是你的宏伟意图。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句