期货软件开发 - 交易报表

期货交易报表窗体(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(); // 点击"查询业绩"按钮,重新加载业绩数据
}
// 平仓/流水/成交按钮逻辑一致
  • 关键说明:按钮点击事件直接调用对应的 "获取数据" 方法,实现手动刷新。
相关推荐
暴躁网友w2 小时前
掌握Fetch与Flask交互:让前端表单提交更优雅的动态之道
前端·flask·交互
木斯佳2 小时前
前端八股文面经大全:腾讯前端暑期提前批一、二、三面面经(上)(2026-03-04)·面经深度解析
前端
嘉琪0012 小时前
Day4 完整学习包(this 指向)——2026 0313
前端·javascript·学习
前端小菜鸟也有人起2 小时前
Vue3父子组件通信方法总结
前端·javascript·vue.js
peachSoda72 小时前
小程序图片加载优化方案
前端·微信小程序·小程序
薛不痒2 小时前
github基础入门(3):版本控制(提交,分支删除,提交规范)
大数据·windows·git·elasticsearch·github
Maimai108082 小时前
React Server Components 是什么?一文讲清 CSR、Server Components 与 Next.js 中的客户端/服务端组件
前端·javascript·css·react.js·前端框架·html·web3