减少从DataSet到WinForm控件的分配的最佳方法是什么

时间:2015-10-22 14:42:30

标签: c# winforms user-interface dataset controls

我有几个实体,如:客户,产品,订单,订单详细信息,员工等。每个实体都有一个带有CRUD功能的窗口表单。

我遇到的问题是,在将数据从DataSet传递给Controls反之时,我编写了很多这样的行。

Search()
{
 DataSet dsResult = Server.InvokeSearch();
 txtCustName.Txt = dsResult.Tables["Customer"].Rows[0]["CustName"];
 ... //like 50 columns
 txtAddress.Txt = dsResult.Tables["Customer"].Rows[0]["Address"];
}

Save()
{
 dsUpdate.Tables["Customer"].Rows[0]["CustName"] = txtCustName.Txt;
 ... //like 50 columns
 dsUpdate.Tables["Customer"].Rows[0]["Address"] = txtAddress.Txt;
Server.Update(dsUpdate);
}

如果我只指定Table.Column,如果控件有办法检索值本身,那将非常好:

txtCustName.DbColumn = "Customer.CustName";
Search()
{
mainDs = server.InvokeSearch();
}
Update()
{
server.Update(mainDs);
}

我完全迷失了。我不知道应该搜索什么主题&调查。 欢迎任何提示,帮助,链接和示例。

2 个答案:

答案 0 :(得分:0)

你有没有探索WinForms data binding可能性? 这样您就可以直接将控件映射到数据源。

答案 1 :(得分:0)

数据绑定是你的朋友。您可以通过以下简单步骤实现您的要求:

(A)宣布成员

BindingSource bindingSource;
DataSet dataSet;

(B)设置绑定

bindingSource = new BindingSource { DataMember = "Customer" };
txtCustName.DataBindings.Add("Text", bindingSource, "CustName");
txtAddress.DataBindings.Add("Text", bindingSource, "Address");
// ...

你完成了。

请求用法:

// Search
bindingSource.DataSource = dataSet = server.InvokeSearch();

// Update
server.Update(dataSet);

请注意,使用中间BindindgSource可以轻松地将所有控件重新绑定到其他数据源。