C# 如何在MVP中使用模型填充数据网格视图

C# 如何在MVP中使用模型填充数据网格视图,c#,.net,oop,binding,mvp,C#,.net,Oop,Binding,Mvp,在win forms应用程序中,UI中有一个网格视图,其中应填充客户端分支机构的详细信息。大约有50个分支机构。因此DataService类中的GetBranchDetails()方法返回一个DataSet,而Presenter类将该DataSet传递到UI的BindData()方法,其中网格视图的datasource属性设置为DataSet对象,如代码所示 问题是DataService没有返回模型,而是返回DataSet。有人能告诉我如何使用分支机构模型而不是使用数据集吗?因此,模型应该从数据

在win forms应用程序中,UI中有一个网格视图,其中应填充客户端分支机构的详细信息。大约有50个分支机构。因此
DataService
类中的
GetBranchDetails()
方法返回一个
DataSet
,而
Presenter
类将该
DataSet
传递到UI的
BindData()
方法,其中网格视图的
datasource
属性设置为
DataSet
对象,如代码所示

问题是
DataService
没有返回模型,而是返回
DataSet
。有人能告诉我如何使用
分支机构
模型而不是使用
数据集
吗?因此,
模型
应该从
数据服务
返回,然后
演示者
将该
模型
传递到UI,其中
模型
将设置为网格视图的
数据源
。请注意,始终会有多个分支机构

数据服务类

        public DataTable GetBranchDetails()
        {
            string selectStatement = "SELECT ID, branch_name + ', ' + branch_add AS Branch,       area, sm, atten_status FROM Branch WHERE Status='Active'";
            using (SqlConnection sqlConnection = new   SqlConnection(db.GetConnectionString))
            using (SqlCommand sqlCommand = new SqlCommand(selectStatement, sqlConnection))
            using (SqlDataAdapter da = new SqlDataAdapter(sqlCommand))
            using (DataSet ds = new DataSet())
            using (DataTable dt = new DataTable())
           {
              ds.Tables.Add(dt);    
              sqlConnection.Open();
              da.Fill(dt);
              return dt;
           }
        }
private void _View_ShowBranches(object sender, EventArgs e)
{
    ShowBranches();
}

private void ShowBranches()
{
    var dt = DataService.GetBranchDetails();
    this._View.BindData(dt);
}
演示者课程

        public DataTable GetBranchDetails()
        {
            string selectStatement = "SELECT ID, branch_name + ', ' + branch_add AS Branch,       area, sm, atten_status FROM Branch WHERE Status='Active'";
            using (SqlConnection sqlConnection = new   SqlConnection(db.GetConnectionString))
            using (SqlCommand sqlCommand = new SqlCommand(selectStatement, sqlConnection))
            using (SqlDataAdapter da = new SqlDataAdapter(sqlCommand))
            using (DataSet ds = new DataSet())
            using (DataTable dt = new DataTable())
           {
              ds.Tables.Add(dt);    
              sqlConnection.Open();
              da.Fill(dt);
              return dt;
           }
        }
private void _View_ShowBranches(object sender, EventArgs e)
{
    ShowBranches();
}

private void ShowBranches()
{
    var dt = DataService.GetBranchDetails();
    this._View.BindData(dt);
}
查看/UI

public partial class frmAttendancePoints : Form, IView
{
    public frmAttendancePoints()
    {
        InitializeComponents();
    }

    public void BindData(DataSet dt)
    {
        dgAttendancePoints.DataSource = dt;
    }
}

使用此方法将ADO.NET DataTable转换为可以在MVP视图中显示的JSON:

 string GetJson(DataTable table)
    {
        System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
        List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
        Dictionary<string, object> row = null;
        foreach (DataRow dataRow in table.Rows)
        {
            row = new Dictionary<string, object>();
            foreach (DataColumn column in table.Columns)
            {
                row.Add(column.ColumnName.Trim(), dataRow[column]);
            }
            rows.Add(row);
        }
        return serializer.Serialize(rows);
    }
string GetJson(数据表)
{
System.Web.Script.Serialization.JavaScriptSerializer serializer=新的System.Web.Script.Serialization.JavaScriptSerializer();
列表行=新列表();
字典行=空;
foreach(table.Rows中的DataRow DataRow)
{
行=新字典();
foreach(table.Columns中的DataColumn列)
{
row.Add(column.ColumnName.Trim(),dataRow[column]);
}
行。添加(行);
}
返回序列化程序。序列化(行);
}

Json对您有用吗?我还没有尝试过Json,因为我对它一点都不熟悉。但事实上,既然这是一个C#Win表单应用程序,它是一个比返回ado.net数据集更好的解决方案吗?