找回密码
 立即注册

QQ登录

只需一步,快速开始

dapsjj
初级会员   /  发表于:2016-11-4 16:46  /   查看:4360  /  回复:5
本帖最后由 dapsjj 于 2016-11-4 16:52 编辑

Spread被鼠标单击选中的行设置为蓝色怎么做?代码怎么写呢?
想要达到图片中的效果。
1.png

5 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-11-4 17:57:08
沙发
您好,您可以重写 SelectionRenderer


public class SelectionRenderer : FarPoint.Win.Spread.ISelectionRenderer
{
     public void PaintSelection(Graphics g, int x, int y, int width, int height)
     {
          SolidBrush selectionBrush = new SolidBrush(Color.Blue);
          g.FillRectangle(selectionBrush, x, y, width, height);
          selectionBrush.Dispose();
     }
}

SelectionRenderer sr = new SelectionRenderer();
fpSpread1.SelectionRenderer = sr;
回复 使用道具 举报
dapsjj
初级会员   /  发表于:2016-11-4 19:18:10
板凳
本帖最后由 dapsjj 于 2016-11-4 19:22 编辑
dexteryao 发表于 2016-11-4 17:57
您好,您可以重写 SelectionRenderer

您好,我用的是C#,请问这个代码要新建一个.cs的类去写还是写到Form1.Designer.cs?还是说在前面属性栏的动作里有这个方法,双击后自动进入这个方法去写?
回复 使用道具 举报
dapsjj
初级会员   /  发表于:2016-11-7 08:52:48
地板
本帖最后由 dapsjj 于 2016-11-7 09:03 编辑
dexteryao 发表于 2016-11-4 17:57
您好,您可以重写 SelectionRenderer

您好,我代码按照您说的重写了SelectionRenderer,但是没有生效,请问哪里不对呢?33,34行。213-221行是变背景色的代码。
代码如下:
  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.Runtime.Remoting.Messaging;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. using MY.BLL;
  12. using MY.Common;

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

  25.         private delegate bool DoWorkDelegate();

  26.         public frmGetActualProduction()
  27.         {
  28.             InitializeComponent();
  29.             this.loadingPanel1.OnRotateStateChanged += new LoadingPanel.RotateStateChangedHandler(loadingPanel1_OnRotateStateChanged);
  30.             SelectionRenderer sr = new SelectionRenderer();
  31.             sprshow.SelectionRenderer = sr;
  32.         }

  33.         private void cmdExit_Click(object sender, EventArgs e)
  34.         {
  35.             this.Close();
  36.         }

  37.         
  38.         private void frmGetActualProduction_Load(object sender, EventArgs e)
  39.         {
  40.             try
  41.             {
  42.                 connPCDB = cp.GetConString();
  43.                 SqlHelper sh = new SqlHelper(connPCDB);
  44.                 DataSet ds = sh.ExecuteDatasetSQL("SELECT c1,c2,0 as c3, c4  FROM   tabel1 ");
  45.                 setSpreadData(ds.Tables[0]);
  46.             }
  47.             catch (Exception)
  48.             {
  49.                
  50.             }
  51.         }
  52.    

  53.         private void setSpreadData(DataTable spdt)
  54.         {
  55.             if (this.sprshow.ActiveSheet.RowCount > 0)
  56.             {
  57.                 this.sprshow.ActiveSheet.Rows.Count = 0;
  58.             }
  59.             this.sprshow.ActiveSheet.Rows.Count = spdt.Rows.Count;


  60.             DataRowCollection rows = spdt.Rows;
  61.             int rowCount = rows.Count;
  62.             int nowRow = 0;
  63.             for (int i = 0; i < rowCount; i++)
  64.             {
  65.                 sprshow.ActiveSheet.Cells[nowRow, 0].Value = rows[i]["A"].ToString();
  66.                 sprshow.ActiveSheet.Cells[nowRow, 1].Value = rows[i]["B"].ToString();
  67.                 sprshow.ActiveSheet.Cells[nowRow, 2].Value = rows[i]["C"].ToString();
  68.                 sprshow.ActiveSheet.Cells[nowRow, 3].Value = rows[i]["D"].ToString();

  69.                 nowRow++;
  70.             }
  71.         }

  72.         private void sprshow_ButtonClicked(object sender, FarPoint.Win.Spread.EditorNotifyEventArgs e)
  73.         {
  74.             checked_count = 0;
  75.             
  76.             for (int i = 0; i < sprshow.Sheets[0].Rows.Count; i++)
  77.             {
  78.                 if (checked_count <= 1)
  79.                 {
  80.                     flag = sprshow.Sheets[0].Cells[i, 2].Value.ToString();//复选框是否被选中
  81.                     if (flag == "True")//"True"为选中,"0"为未选中。
  82.                     {
  83.                         int col4_value = int.Parse(sprshow.Sheets[0].Cells[i, 3].Value.ToString());//第4列
  84.                         
  85.                         if (col4_value == 1)
  86.                         {
  87.                             sprshow.Sheets[0].Cells[i, 2].Value = 0;//清除被选的状态
  88.                             bin = int.Parse(sprshow.Sheets[0].Cells[i, 0].Value.ToString());
  89.                             MessageBox.Show(bin);
  90.                             break;
  91.                         }
  92.                         else
  93.                         {
  94.                             checked_count++;
  95.                         }
  96.                     }
  97.                 }
  98.                 else
  99.                 {
  100.                     MessageBox.Show("只能选一个.");
  101.                     checked_count = 0;
  102.                     break;
  103.                 }
  104.             }
  105.         }

  106.         void loadingPanel1_OnRotateStateChanged()
  107.         {
  108.             this.Invoke(new Action(delegate()
  109.             {
  110.                 this.sprshow.Visible = !this.sprshow.Visible;
  111.                 this.Cmdchace.Enabled = !this.Cmdchace.Enabled;
  112.                 this.cmdGetActualProduction.Enabled = !this.cmdGetActualProduction.Enabled;
  113.                 this.cmdExit.Enabled = !this.cmdExit.Enabled;
  114.             }));
  115.         }

  116.         private bool DoWork()
  117.         {
  118.             System.Threading.Thread.Sleep(10000);
  119.             return true;
  120.         }

  121.         private void DoWorkCallBack(IAsyncResult ar)
  122.         {
  123.             AsyncResult result = (AsyncResult)ar;
  124.             DoWorkDelegate caller = (DoWorkDelegate)result.AsyncDelegate;
  125.             bool bResult = caller.EndInvoke(ar);

  126.             this.loadingPanel1.Stop();
  127.         }

  128.         private void cmdGetActualProduction_Click(object sender, EventArgs e)
  129.         {
  130.             if (MessageBox.Show("", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.Cancel)
  131.             {
  132.                 return;
  133.             }
  134.             else { //点击的是"OK"按钮
  135.                 int count = 0;//计算被选择的复选框数量
  136.                 string status = "";
  137.                 for (int i = 0; i < sprshow.Sheets[0].Rows.Count; i++)
  138.                 {
  139.                     status = sprshow.Sheets[0].Cells[i, 2].Value.ToString();//复选框是否被选中
  140.                     if (status == "True")//"True"为选中,"0"为未选中。
  141.                     {
  142.                         count++;
  143.                     }
  144.                 }
  145.                 if (count == 0)
  146.                 {
  147.                     MessageBox.Show("请选择.");
  148.                     return;
  149.                 }
  150.                 else if (count > 1)
  151.                 {
  152.                     MessageBox.Show("只能选一个.");
  153.                     return;
  154.                 }
  155.                 else//count == 1
  156.                 {

  157.                         try
  158.                         {
  159.                             connPCDB = cp.GetConString();
  160.                             SqlHelper sh = new SqlHelper(connPCDB);
  161.                             sh.Param = sh.GetNewParam();
  162.                             sh.Param.AddParam("@intBin", SqlDbType.Int, bin);
  163.                             DataSet ds = sh.ExecuteDatasetSP("AcquireMeterActualResults", ref sh.Param, 3000);
  164.                            
  165.                         }
  166.                         catch (Exception)
  167.                         {
  168.                            
  169.                         }  

  170.                 }

  171.             }
  172.         }

  173.         private void Cmdchace_Click(object sender, EventArgs e)
  174.         {
  175.            
  176.             for (int i = 0; i < sprshow.Sheets[0].Rows.Count; i++) {
  177.                  int col4_value = int.Parse(sprshow.Sheets[0].Cells[i, 3].Value.ToString());//第4列
  178.                  if (col4_value==1)
  179.                  {
  180.                      for (int j = 0; j <= i;j++ )
  181.                      {
  182.                          sprshow.Sheets[0].Cells[j, 2].Value = 0;
  183.                      }
  184.                      MessageBox.Show("不能全选.");
  185.                      break;
  186.                 }
  187.                 sprshow.Sheets[0].Cells[i, 2].Value = true;
  188.             }
  189.         }


  190.     }

  191.     public class SelectionRenderer : FarPoint.Win.Spread.ISelectionRenderer
  192.     {
  193.         public void PaintSelection(Graphics g, int x, int y, int width, int height)
  194.         {
  195.             SolidBrush selectionBrush = new SolidBrush(Color.Blue);
  196.             g.FillRectangle(selectionBrush, x, y, width, height);
  197.             selectionBrush.Dispose();
  198.         }
  199.     }
  200. }
复制代码
1.png
回复 使用道具 举报
dapsjj
初级会员   /  发表于:2016-11-7 08:53:05
5#
本帖最后由 dapsjj 于 2016-11-7 09:01 编辑

复制代码
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-11-7 19:59:59
6#
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部