微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐