如何在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
相关产品推荐
相关产品推荐

