期货软件开发 - 交易报表

期货交易报表窗体(TFrmReport),核心功能是从后端接口获取四类交易数据(业绩、平仓、流水、成交),并展示在对应的 DataGridView 控件中。窗体支持按时间范围筛选数据,切换标签页时自动加载对应数据,也可通过按钮手动刷新。


核心模块拆解与关键说明

1. 数据存储与初始化
复制代码
// 定义四类核心数据的存储列表
public List<ST_PingCang_Info>   mListPingCang = new List<ST_PingCang_Info> ();
public List<ST_YeJiInfo>        mListYeJi = new List<ST_YeJiInfo> ();
public List<ST_LiuShuiInfo>     mListLiuShui = new List<ST_LiuShuiInfo>();
public List<ST_Trade_Info>      mListTrade = new List<ST_Trade_Info>();

// 窗体构造函数:初始化时间控件为近7天,并默认加载业绩数据
public TFrmReport()
{
    InitializeComponent();
    DateTime dtTime1 = DateTime.Now.AddDays(-7);
    DateTime dtTime2 = DateTime.Now;
    // 给所有时间筛选控件赋值
    dtpBeginYeJi.Value = dtTime1;
    dtpEndYeJi.Value = dtTime2;
    // ... 其他时间控件赋值
    this.GetYeJiReport(); // 加载业绩数据
}
  • 关键说明ST_PingCang_Info/ST_YeJiInfo 等是自定义结构体 / 类,用于封装对应业务数据;时间控件默认展示近 7 天数据。
2. 标签页切换逻辑
复制代码
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
    int selIndex = tabControl1.SelectedIndex;
    if (selIndex == 0) this.GetYeJiReport();      // 业绩标签
    else if (selIndex == 1) this.GetFlatReport(); // 平仓标签
    else if (selIndex == 2) this.GetLiuShuiReport(); // 流水标签
    else if (selIndex == 3) this.GetTradeReport(); // 成交标签
}
  • 关键说明:切换标签页时自动加载对应数据,提升用户体验。
3. 核心:接口请求
复制代码
private void GetYeJiReport()
{
    mListYeJi.Clear(); // 清空旧数据
    // 1. 处理时间参数:转换为时间戳
    string strBegin = dtpBeginYeJi.Value.ToShortDateString();
    string strEnd = dtpEndYeJi.Value.ToShortDateString();
    long lBeginTime = Utils.TimeStringToTimeStamp(strBegin + " 00:00:00");
    long lEndTime = Utils.TimeStringToTimeStamp(strEnd + " 23:59:59");
    
    try
    {
        // 2. 构造请求参数(用户信息+时间范围)
        JObject joParam = new JObject();
        joParam.Add("UserID", Common.gMeInfo.nUserID.ToString());
        joParam.Add("Password", Common.gMeInfo.cMd5Password);
        joParam.Add("Token", Common.gMeInfo.cToken);
        joParam.Add("BeginTime", lBeginTime);
        joParam.Add("EndTime", lEndTime);
        
        // 3. 发送 POST 请求(JSON 格式)
        string url = Common.http_url + "getYeJiReport";
        string response = Http.HttpPostJson(url, joParam.ToString());
        
        // 4. 解析 JSON 响应
        JObject json = JObject.Parse(response);
        if (json["code"].ToString() != "0") return; // 接口返回非成功码,直接返回
        if (int.Parse(json["data"]["rowcount"].ToString()) == 0) return; // 无数据
        
        // 5. 遍历数据并封装到实体列表
        JArray jaData = (JArray)json["data"]["row"];
        for (int i = 0; i < jaData.Count(); i++)
        {
            ST_YeJiInfo yjInfo = new ST_YeJiInfo();
            yjInfo.baseMoney = float.Parse(jaData[i]["baseMoney"].ToString());
            // ... 其他字段赋值
            mListYeJi.Add(yjInfo); // 添加到列表
        }
        this.UpdateYeJiData(); // 更新界面展示
    }
    catch(Exception ex)
    {
        Common.ShowMsg("获取业绩失败"); // 异常提示
    }
}
  • 关键说明
    • 所有接口请求逻辑一致:构造参数 → 发送 POST → 解析 JSON → 封装数据 → 更新界面;
    • 接口鉴权:携带 UserID/Password/Token。
4. 界面数据渲染
复制代码
private void UpdatePingCangData()
{
    dataGridView_FlatRecord.Rows.Clear(); // 清空表格
    foreach(var node in mListPingCang)
    {
        // 1. 枚举值转换(如 1=平空,2=平多)
        string oplb = "";
        if (node.buySell == 1) oplb = "平空";
        else if (node.buySell == 2) oplb = "平多";
        // 2. 时间戳转换为可读时间
        string cjTime = Utils.TimeStampToTimeString(node.time);
        
        // 3. 新增行并赋值
        int rowindex = dataGridView_FlatRecord.Rows.Add();
        DataGridViewRow row = dataGridView_FlatRecord.Rows[rowindex];
        row.Tag = node; // 行绑定原始数据(方便后续操作)
        row.Cells["colPingCang_GoodsName"].Value = node.goodname.ToString();
        row.Cells["colPingCang_lb"].Value = oplb;
        // ... 其他列赋值
    }
}
. 手动刷新按钮逻辑
复制代码
private void btnOKYeJi_Click(object sender, EventArgs e)
{
    GetYeJiReport(); // 点击"查询业绩"按钮,重新加载业绩数据
}
// 平仓/流水/成交按钮逻辑一致
  • 关键说明:按钮点击事件直接调用对应的 "获取数据" 方法,实现手动刷新。
相关推荐
ttwuai几秒前
GoFrame 后台日志清空失败:无 WHERE 删除为什么被拦住
前端·golang
易筋紫容5 分钟前
创建型模式:对象的诞生艺术
开发语言·前端·javascript
半句唐诗35 分钟前
我是如何通过 Access Token 成功发布第一个 npm 包的
前端·npm·node.js
程序员黑豆38 分钟前
鸿蒙应用开发:@Provider 与 @Consumer 跨组件双向同步详解
前端·harmonyos
paopaokaka_luck44 分钟前
基于springboot3+vue3的智能文库平台(AI智能搜索、AI智能汇总、实时在线状态展示、多格式文档预览与富文本编辑、Echarts图形化分析)
前端·网络·spring boot·网络协议·echarts
牧艺1 小时前
cos-design PhotoAlbum:用 CSS 3D 做一个「能翻页」的实体相册
前端·css·交互设计
脚踏实地皮皮晨1 小时前
002002002_DepandencyObject类2
开发语言·windows·算法·c#·visual studio
洪贺1 小时前
从原始采样到可缩放心电图:用 h5ECG 绘制自己的 ECG
前端
冰心孤城1 小时前
Excel: xls与xlsx格式转换排坑指南
java·前端·excel
程序员黑豆2 小时前
鸿蒙应用开发之跨组件传参:@Provide 与 @Consume 跨层级数据同步详解
前端·harmonyos