C/S中的MVC(2)
using System;
using System.Data;
using System.Windows.Forms;
using Business;
namespace Business.Base
{
/// <summary>
/// Description:Form窗体的基类。
/// 在各个窗体中,有一个DataSet用来存储取得的初始数据,
/// 该DataSet用dataSet表示。
/// 在dataSet中,包含了一个名称为Meta的DataTable,
/// 该DataTable用dataTable表示。
/// 当调用该类时,首先给dataTable添加一行数据,
/// 其中存储了该窗体的名称。
/// 在本类中,设置了抽象函数SetColumn,它的功能就是给dataTable
/// 设置其它需要的列。另外,本类还有一个Obj变量,用来传输其它
/// 初始化时候用到的数据。
/// 抽象函数Initial的作用是初始化窗体的控件。
/// </summary>
public abstract class FormBN
{
/// <summary>
///初始化的时候,用来传递数据的对象。
/// </summary>
private object Obj;
/// <summary>
/// Description:初始化窗体。
/// </summary>
/// <param name="ds">存储初始数据的DataSet</param>
protected abstract void Initial(DataSet ds);
/// <summary>
/// Description:设置DataSet中Table的列。
/// </summary>
/// <param name="ds">存储初始数据的DataSet</param>
protected abstract void SetColumn(DataSet ds);
/// <summary>
/// Description:构造函数。
/// </summary>
/// <param name="ds">存储数据的DataSet</param>
/// <param name="form">当前窗体</param>
/// <param name="Object">初始对象</param>
public FormBN(DataSet ds, Form form, object Object)
{
ds = GetData();
Obj = Object;
DataRow dr = ds.Tables[FormCommonBN.DTNAME].NewRow();
dr[FormCommonBN.FORMNAME] = form.Name;
ds.Tables[FormCommonBN.DTNAME].Rows.Add(dr);
}
/// <summary>
/// Description:取得窗体初始化数据。
/// </summary>
/// <param name="ds">存储数据的DataSet</param>
public void GetInitialData(DataSet ds)
{
// 如果DataTable为空,则出错
if ((ds.Tables[FormCommonBN.DTNAME] == null) ||
(ds.Tables[FormCommonBN.DTNAME].Rows.Count<= 0))
{
throw new Exception("没有取得需要的数据。");
}
// 初始化窗体
Initial(ds);
}
/// <summary>
/// Description:取得页面需要的DataSet。
/// </summary>
/// <returns>页面需要的DataSet</returns>
public DataSet GetData()
{
DataSet ds = new DataSet();
ds.Tables.Add(FormCommonBN.DTNAME);
//存储页面名称
ds.Tables[FormCommonBN.DTNAME].Columns.Add(FormCommonBN.FORMNAME,typeof(string));
//设置其它列
SetColumn(ds);
return ds;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构