我对 MVP 的事情还很陌生,并且正在慢慢地了解这一切。我遇到的问题是如何在填充 GridView(和 ddls,但我们稍后会解决这个问题)时保持与 MVP 方法的一致性。
可以将其直接连接到对象 DataSourceID 吗?对我来说,这似乎是错误的,因为它绕过了 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();
}
}