【发布时间】:2010-03-04 18:20:12
【问题描述】:
我对整个 MVP 的事情还很陌生,并且慢慢地了解这一切。我遇到的一个问题是如何在填充 GridView(和 ddls,但我们稍后会解决)时与 MVP 方法保持一致。
可以直接连接到 ObjectDataSourceID 吗?对我来说,这似乎是错误的,因为它绕过了 MVP 所做的所有关注点分离。
那么,话虽如此,我该怎么做呢?我如何处理排序(我是否将处理程序事件发送到表示层,如果是的话,它在代码中的外观如何)? 现在我有一个没有排序的 GridView。代码如下。
ListCustomers.aspx.cs:
public partial class ListCustomers : System.Web.UI.Page, IlistCustomer
{
protected void Page_Load(object sender, EventArgs e)
{
//On every page load, create a new presenter object with
//constructor recieving the
// page's IlistCustomer view
ListUserPresenter ListUser_P = new ListUserPresenter(this);
//Call the presenter's PopulateList to bind data to gridview
ListUser_P.PopulateList();
}
GridView IlistCustomer.UserGridView
{
get { return gvUsers; }
set { gvUsers = value; }
}
}
接口 (IlistCustomer.cs):这是在整个 Gridview 控件中发送的错误吗?
public interface IlistCustomer
{
GridView UserGridView { set; get; }
}
演示者 (ListUserPresenter.cs):
public class ListUserPresenter
{
private IlistCustomer view_listCustomer;
private GridView gvListCustomers;
private DataTable objDT;
public ListUserPresenter( IlistCustomer view)
{
//Handle an error if an Ilistcustomer was not sent in)
if (view == null)
throw new ArgumentNullException("ListCustomer View cannot be blank");
//Set local IlistCustomer interface view
this.view_listCustomer = view;
}
public void PopulateList()
{
//Fill local Gridview with local IlistCustomer
gvListCustomers = view_listCustomer.UserGridView;
// Instantiate a new CustomerBusiness object to contact database
CustomerBusiness CustomerBiz = new CustomerBusiness();
//Call CustomerBusiness's GetListCustomers to fill DataTable object
objDT = CustomerBiz.GetListCustomers();
//Bind DataTable to gridview;
gvListCustomers.DataSource = objDT;
gvListCustomers.DataBind();
}
}
【问题讨论】: