期货软件开发 - 交易报表

期货交易报表窗体(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(); // 点击"查询业绩"按钮,重新加载业绩数据
}
// 平仓/流水/成交按钮逻辑一致
  • 关键说明:按钮点击事件直接调用对应的 "获取数据" 方法,实现手动刷新。
相关推荐
ayaya_mana15 分钟前
MCTier 组网联机工具:安装、配置与私有化部署
网络·windows·内网穿透·联机
故七月19 分钟前
GEO 信源评估体系:如何判断一条网页信源能否被大模型采信
前端·网络·人工智能
liangshanbo121521 分钟前
Webpack 常见 Plugin 面试题
前端·webpack·node.js
xxwl58523 分钟前
vue3的入门学习
前端·vue.js·学习
用户8471721028424 分钟前
.shot 文件格式规范
前端·后端
web打印社区26 分钟前
政务办事大厅:叫号小票、办理回执网页怎么静默出纸
前端·javascript·vue.js·pdf·html·政务
C++ 老炮儿的技术栈1 小时前
有符号变量与无符号变量的区别
服务器·开发语言·前端·数据结构·c++·算法·c
aixingpan1 小时前
aixingpan.cn API开发文档:api_docs_bichart_natalvssecondary2接口指南
前端·php
liangshanbo12151 小时前
Webpack Tree Shaking 面试题整理
前端·webpack·node.js
去伪存真2 小时前
从乱码到高精度检索:探矿业务中 TXT、Word、PDF 与网页的 RAG 清洗之道
前端·agent