找回密码
 立即注册

QQ登录

只需一步,快速开始

dapsjj
初级会员   /  发表于:2016-11-1 11:20  /   查看:4228  /  回复:3
本帖最后由 dapsjj 于 2016-11-1 11:27 编辑
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using MySystem.BLL;
  11. using MySystem.Common;


  12. namespace MySystem
  13. {
  14.     public partial class frmDirectProduction2 : Form
  15.     {
  16.         
  17.         #region
  18.         private string connPCDB = null;
  19.         private CommonPara cp = new CommonPara();
  20.         private string status = "";
  21.         #endregion

  22.         public frmDirectProduction2()
  23.         {
  24.             InitializeComponent();
  25.         }

  26.         #region
  27.          
  28.         private void frmDirectProduction2_Load(object sender, EventArgs e)
  29.         {
  30.             try
  31.             {
  32.                 connPCDB = cp.GetConString();
  33.                 SqlHelper sh = new SqlHelper(connPCDB);
  34.                 sh.Param = sh.GetNewParam();
  35.                 sh.Param.AddParam("@TYPE", SqlDbType.Int, 0);
  36.                 DataSet ds = sh.ExecuteDatasetSP("MyProc", ref sh.Param, 30000);
  37.                 setSpreadData(ds.Tables[0]);
  38.             }
  39.             catch (Exception)
  40.             {
  41.                 LogUtil.log("出错");
  42.             }
  43.     }
  44.         #endregion

  45.         #region spread
  46.         private void setSpreadData(DataTable spdt)
  47.         {
  48.             if (this.sprdMain.ActiveSheet.RowCount > 0)
  49.             {
  50.                 this.sprdMain.ActiveSheet.Rows.Count = 0;
  51.             }
  52.             this.sprdMain.ActiveSheet.Rows.Count = spdt.Rows.Count;


  53.             DataRowCollection rows = spdt.Rows;
  54.             int rowCount = rows.Count;
  55.             int nowRow = 0;
  56.             for (int i = 0; i < rowCount; i++)
  57.             {
  58.                 sprdMain.ActiveSheet.Cells[nowRow, 0].Value = rows[i]["A列"].ToString();
  59.                 sprdMain.ActiveSheet.Cells[nowRow, 1].Value = rows[i]["B列"].ToString();
  60.                 sprdMain.ActiveSheet.Cells[nowRow, 2].Value = rows[i]["C列"].ToString();
  61.                 sprdMain.ActiveSheet.Cells[nowRow, 3].Value = rows[i]["D列"].ToString();
  62.                 sprdMain.ActiveSheet.Cells[nowRow, 4].Value = rows[i]["E列"].ToString();
  63.                 sprdMain.ActiveSheet.Cells[nowRow, 5].Value = rows[i]["F列"].ToString();
  64.                 //第F列,下标是5,是spread的checkbox类型
  65.                 sprdMain.ActiveSheet.Cells[nowRow, 6].Value = rows[i]["G列"].ToString();
  66.                 sprdMain.ActiveSheet.Cells[nowRow, 7].Value = rows[i]["H列"].ToString();
  67.                
  68.                 nowRow++;
  69.             }
  70.         }
  71.         #endregion

  72.         #region
  73.         private void btnExit_Click(object sender, EventArgs e)
  74.         {
  75.             this.Close();
  76.         }
  77.         #endregion

  78.         private void btnDecideActualData_Click(object sender, EventArgs e)
  79.         {
  80.             if (MessageBox.Show("执行?", "系统软件", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.Cancel)
  81.             {
  82.                 return;
  83.             }
  84.         }
  85.         //想让spread单元格失去焦点时触发该事件,去取出被选中的一列的checkbox的状态,
  86.         //请问要如何修改代码能让spread中的一个checkbox在被选中的时候把这个checkbox的值给变量status,
  87.         //当选中超过1个checkbox时提示“选择不能超过1个checkbox”,没有选择checkbox时,提示"需要选择一个checkbox",要如何改代码呢?
  88.                  private void sprdMain_LeaveCell(object sender, FarPoint.Win.Spread.LeaveCellEventArgs e)
  89.         {
  90.            
  91.                for (int i = 0; i < sprdMain.Sheets[0].Rows.Count; i++)
  92.              {
  93.                status = sprdMain.Sheets[0].Cells[i, 5].Value.ToString();//复选框所在的列
  94.              }
  95.             
  96.         }
  97.     }
  98. }
  99.    
复制代码

3 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-11-1 12:27:14
沙发
用 fpSpread1_ButtonClicked 事件。 CheckBoxCellType 点击的时候会触发这个事件。

然后您记录状态,判断
回复 使用道具 举报
dapsjj
初级会员   /  发表于:2016-11-1 14:09:23
板凳
本帖最后由 dapsjj 于 2016-11-1 15:57 编辑
dexteryao 发表于 2016-11-1 12:27
用 fpSpread1_ButtonClicked 事件。 CheckBoxCellType 点击的时候会触发这个事件。

然后您记录状态,判 ...

您好,我改了一下代码,做计数提示的时候有个问题,当选择了2个复选框的时候能给出提示,但是当2个复选框从被勾选状态清掉,变成0个复选框被选中,再勾选任何一个复选框,还是能弹出消息,如下图所示,这不符合要求,您能看看是哪里写的不对吗?
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using MySystem.BLL;
  11. using MySystem.Common;


  12. namespace MySystem
  13. {
  14.     public partial class frmDirectProduction2 : Form
  15.     {
  16.       
  17.         #region
  18.         private string connPCDB = null;
  19.         private CommonPara cp = new CommonPara();
  20.         private string flag = "";//初始化被选中的记录的标志位空
  21.         private int checked_count = 0;//计算被选中的checkbox的数量
  22.         private int bin = -1;
  23.         #endregion

  24.         public frmDirectProduction2()
  25.         {
  26.            
  27.             InitializeComponent();
  28.         }

  29.         #region 画面初期化
  30.         private void frmDirectProduction2_Load(object sender, EventArgs e)
  31.         {
  32.             try
  33.             {
  34.                 connPCDB = cp.GetConString();
  35.                 SqlHelper sh = new SqlHelper(connPCDB);
  36.                 sh.Param = sh.GetNewParam();
  37.                 sh.Param.AddParam("@TYPE", SqlDbType.Int, 0);
  38.                 DataSet ds = sh.ExecuteDatasetSP("MyProc", ref sh.Param, 30000);
  39.                 setSpreadData(ds.Tables[0]);
  40.             }
  41.             catch (Exception)
  42.             {
  43.                 LogUtil.log("出错.");
  44.             }
  45.     }
  46.         #endregion

  47.         #region spread
  48.         private void setSpreadData(DataTable spdt)
  49.         {
  50.             if (this.sprdMain.ActiveSheet.RowCount > 0)
  51.             {
  52.                 this.sprdMain.ActiveSheet.Rows.Count = 0;
  53.             }
  54.             this.sprdMain.ActiveSheet.Rows.Count = spdt.Rows.Count;


  55.             DataRowCollection rows = spdt.Rows;
  56.             int rowCount = rows.Count;
  57.             int nowRow = 0;
  58.             for (int i = 0; i < rowCount; i++)
  59.             {
  60.                 sprdMain.ActiveSheet.Cells[nowRow, 0].Value = rows[i]["A列"].ToString();
  61.                 sprdMain.ActiveSheet.Cells[nowRow, 1].Value = rows[i]["B列"].ToString();
  62.                 sprdMain.ActiveSheet.Cells[nowRow, 2].Value = rows[i]["C列"].ToString();
  63.                 sprdMain.ActiveSheet.Cells[nowRow, 3].Value = rows[i]["D列"].ToString();
  64.                 sprdMain.ActiveSheet.Cells[nowRow, 4].Value = rows[i]["E列"].ToString();
  65.                 sprdMain.ActiveSheet.Cells[nowRow, 5].Value = rows[i]["F列"].ToString();
  66.                 sprdMain.ActiveSheet.Cells[nowRow, 6].Value = rows[i]["G列"].ToString();
  67.                 sprdMain.ActiveSheet.Cells[nowRow, 7].Value = rows[i]["H列"].ToString();
  68.                
  69.                 nowRow++;
  70.             }
  71.             //fps.ActiveSheet.DataSource = spdt;
  72.         }
  73.         #endregion

  74.         #region
  75.         private void btnExit_Click(object sender, EventArgs e)
  76.         {
  77.             this.Close();
  78.         }
  79.         #endregion

  80. private void sprdMain_ButtonClicked(object sender, FarPoint.Win.Spread.EditorNotifyEventArgs e)
  81.         {
  82.             for (int i = 0; i < sprdMain.Sheets[0].Rows.Count; i++)
  83.             {
  84.                 if (checked_count <= 1)
  85.                 {
  86.                     flag = sprdMain.Sheets[0].Cells[i, 5].Value.ToString();//复选框是否被选中
  87.                     if (flag == "True")//"True"为选中,"0"为未选中。
  88.                     {
  89.                         checked_count++;
  90.                         bin = int.Parse(sprdMain.Sheets[0].Cells[i, 4].Value.ToString());
  91.                         if (checked_count==0)
  92.                         {
  93.                             MessageBox.Show("请选择一条数据.", "消息");
  94.                         }
  95.                     }
  96.                 }
  97.                 else
  98.                 {
  99.                     MessageBox.Show("不能选择多条数据.","消息");
  100.                     checked_count = 0;
  101.                     break;
  102.                 }
  103.             }
  104.         }
复制代码


2016-11-01_135955.png
2016-11-01_140109.png
2016-11-01_140152.png
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-11-1 15:42:41
地板
这个应该是您那里算法的问题。
简单点的算法就是每次都计算checkedcount 然后再根据count显示提示

比如
checked_count=0
for()
{
if(flag==“true”)
{
checked_count++
}
}

if(checked_count==0){
message 请选择
}
if(checked_count》1)
message 选多了

评分

参与人数 1满意度 +5 收起 理由
dapsjj + 5

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部