c# – 如何使用MVP中的模型填充数据网格视图

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

问题是DataService没有返回模型而是返回DataSet.有人可以告诉我如何使用BranchOffice模型而不是在这里使用DataSet吗?因此,应该从DataService返回Model,然后演示者将该Model传递给UI,其中Model将被设置为网格视图的数据源.请注意,总会有不止一个分支机构!

DataService类

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);
    }

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...