You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Crystal Report条码生成程序中添加标签数量递减功能按钮

实现方案

你所有的条码标签数据都存储在全局的DataTable对象dt中,删除最后1条标签的核心逻辑就是移除dt的最后一行数据,再刷新Crystal Report的数据源即可,具体操作如下:

1. 界面添加按钮

在窗体设计器中新增一个Button控件,命名为btn_DeleteLast,显示文本设置为「删除最后1条标签」。

2. 优化原有生成条码的代码(可选,建议修改)

你现有代码中将Crystal Report加载、绑定逻辑写在了for循环内部,会重复执行多次造成性能浪费,调整后代码如下:

private void btn_barcode_Click(object sender, EventArgs e)
{
    // 先做输入合法性校验,避免转换报错
    if (!int.TryParse(tb_loop.Text, out int Endcount) || Endcount <=0)
    {
        MessageBox.Show("请输入有效的生成数量");
        return;
    }
    for (int i = 1; i <= Endcount; i++)
    {
        dt.Rows.Add(cb_product.Text, tb_price.Text + " IQD", tb_cname.Text, tb_enterbarcode.Text);
    }
    // 循环结束后统一绑定报表,仅执行一次
    cry.Load("CrystalReport1.rpt");
    cry.SetDataSource(dt);
    crystalReportViewer1.ReportSource = cry;
}

3. 编写删除按钮点击事件

双击设计器里的删除按钮,添加以下事件代码:

private void btn_DeleteLast_Click(object sender, EventArgs e)
{
    // 先判断是否有可删除的数据
    if (dt != null && dt.Rows.Count > 0)
    {
        // 移除最后一行数据
        dt.Rows.RemoveAt(dt.Rows.Count - 1);
        // 刷新报表预览
        cry.SetDataSource(dt);
        crystalReportViewer1.ReportSource = cry;
    }
    else
    {
        MessageBox.Show("当前没有可删除的标签数据");
    }
}

补充说明

如果需要支持删除指定位置的标签,你可以在界面添加序号输入框,获取用户输入的序号后把RemoveAt的参数改成对应序号减1即可(DataTable行索引从0开始)。


内容的提问来源于stack exchange,提问作者Abdullah Muthanna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:09:00