期货软件开发 - 交易报表

期货交易报表窗体(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(); // 点击"查询业绩"按钮,重新加载业绩数据
}
// 平仓/流水/成交按钮逻辑一致
  • 关键说明:按钮点击事件直接调用对应的 "获取数据" 方法,实现手动刷新。
相关推荐
Mintopia1 天前
界面上的小细节,决定用户会不会骂产品
前端
Hommy881 天前
【开源剪映小助手-客户端】前端界面设计
前端·开源·github
恋猫de小郭1 天前
抖音“极客”适配 Android 5 ~ 9 等老机型技术解读,都是骚操作
android·前端·flutter
IT_陈寒1 天前
SpringBoot自动配置的坑,我调试到凌晨三点才爬出来
前端·人工智能·后端
qq_339191141 天前
kimi-cli 服务形式启动,kimi-cli无头模式 kimi-cli web启动,
服务器·前端·javascript
落魄江湖行1 天前
入门篇四:Nuxt4布局系统:让页面框架复用变得简单
前端·vue·nuxt4
恋猫de小郭1 天前
你的 AI 不好用,可能只是它在演你,或者在闹情绪
前端·人工智能·ai编程
那我懂你的意思啦1 天前
Vue2+Vue3学习
前端·vue.js·学习
@大迁世界1 天前
17.在 React 中如何根据条件决定渲染哪个组件?
前端·javascript·react.js·前端框架·ecmascript
belldeep1 天前
python:介绍 UV 安装,如何使用 UV 安装配置 OpenHarness
windows·python·环境变量·uv