找回密码
 立即注册

QQ登录

只需一步,快速开始

shizuka

银牌会员

6

主题

39

帖子

3208

积分

银牌会员

积分
3208

活字格认证

shizuka
银牌会员   /  发表于:2011-5-26 16:37  /   查看:19138  /  回复:32
请教MultiRow6.0,在Cell中 录入的值长度超过要求的长度,
然后 鼠标点到别的地方,想弹MSGBOX,光表不走,还在错误的单元格.
这个校验应该在什么事件里设置.
另只有得到焦点的单元格才能设置成黄色.

32 个回复

倒序浏览
barrylei
超级版主   /  发表于:2011-5-26 17:59:00
沙发
在CellValidating事件里面,写下面的代码

  1.         private void gcMultiRow1_CellValidating(object sender, GrapeCity.Win.MultiRow.CellValidatingEventArgs e)
  2.         {
  3.             if (e.FormattedValue != null && e.CellName == "textBoxCell1" && e.FormattedValue.ToString().Length  > 5)
  4.             {
  5.                 e.Cancel = true;
  6.                 MessageBox.Show("Error");
  7.             }

  8.         }
复制代码
回复 使用道具 举报
barrylei
超级版主   /  发表于:2011-5-26 18:06:00
板凳
>另只有得到焦点的单元格才能设置成黄色.

确认一下,这个需求的意识是不是,一个单元格得到焦点时,背景变成黄色,失去焦点时,背景又得回滚到原来的颜色?
回复 使用道具 举报
barrylei
超级版主   /  发表于:2011-5-27 09:22:00
地板
>另只有得到焦点的单元格才能设置成黄色.

代码如下,在CellEnter的时候设置用户想要的颜色,在CellLeave的时候恢复原来的颜色

  1.         private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             this.gcMultiRow1.RowCount = 5;
  4.             this.gcMultiRow1.CellEnter += new EventHandler<GrapeCity.Win.MultiRow.CellEventArgs>(gcMultiRow1_CellEnter);
  5.             this.gcMultiRow1.CellLeave += new EventHandler<GrapeCity.Win.MultiRow.CellEventArgs>(gcMultiRow1_CellLeave);
  6.         }

  7.         private Color temp = Color.Empty; //临时的变量用于Cache原来的颜色
  8.         private Color UserColor = Color.Yellow; // 用户期望设置成的颜色
  9.         void gcMultiRow1_CellEnter(object sender, GrapeCity.Win.MultiRow.CellEventArgs e)
  10.         {
  11.             temp = this.gcMultiRow1.CurrentCell.Style.BackColor; //进入Cell的时候把原来的颜色保留
  12.             this.gcMultiRow1.CurrentCell.Style.SelectionBackColor = UserColor;//进入Cell的时候,设置用户想要的颜色
  13.         }

  14.         void gcMultiRow1_CellLeave(object sender, GrapeCity.Win.MultiRow.CellEventArgs e)
  15.         {
  16.             this.gcMultiRow1.CurrentCell.Style.SelectionBackColor = temp; //离开Cell的时候,恢复Cell原来的颜色
  17.         }
复制代码
回复 使用道具 举报
shizuka
银牌会员   /  发表于:2011-5-27 14:10:00
5#

回复 4# barrylei 的帖子

谢谢斑竹 ,校验的问题解决了.现在又出现了一个新的问题.
MultiRow6.0,里边有一个COMBO, COMBO里面是 99:XXXXXXXXX这样的设置,但是选择完以后,画面上就想显示99,:号后面的不想显示,可以实现吗?另COMBO是可以手动入力的.
回复 使用道具 举报
barrylei
超级版主   /  发表于:2011-5-27 14:29:00
6#

回复 5# shizuka 的帖子

能说得再清楚一点吗?你在ComboBoxCell的哪个属性里面设置的99: XXXXXXXXX?
回复 使用道具 举报
shizuka
银牌会员   /  发表于:2011-5-27 14:41:00
7#

回复 6# barrylei 的帖子

colComb.DataSource = dtRecord         
        colComb.ValueMember = &quot;CODE&quot;         --99
        colComb.DisplayMember = &quot;NAME&quot;       --99:XXXXXXXXXXXXXX
回复 使用道具 举报
shizuka
银牌会员   /  发表于:2011-5-27 14:41:00
8#
colComb.DisplayMember  里面放的99: XXXXXXXXX
回复 使用道具 举报
barrylei
超级版主   /  发表于:2011-5-27 16:07:00
9#
步骤如下
1. 首先写2个新的类,代码如下,主要的目的是继承内嵌的ComboBoxCell,修改一些取值的逻辑
  1.    
  2. public class MyComBoxCell : ComboBoxCell
  3.     {
  4.         public override Type EditType
  5.         {
  6.             get
  7.             {
  8.                 return typeof(MyComBox);
  9.             }
  10.         }
  11.     }

  12.     public class MyComBox : ComboBoxEditingControl
  13.     {
  14.         public override object FormattedValue
  15.         {
  16.             get
  17.             {
  18.                 return base.SelectedValue;  // 取SelectedValue,而不是SelectedText
  19.             }
  20.             set
  21.             {
  22.                 base.FormattedValue = value;
  23.             }
  24.         }
  25.     }
复制代码
2. 写完之后,Build你的工程,在模板设计器里,把原来的ComboBoxCell替换成MyComBoxCell,如下


3. 给GcMultiRow加下面的事件
  1.       
  2. private void Form1_Load(object sender, EventArgs e)
  3.         {
  4.      
  5.             this.gcMultiRow1.EditingControlShowing += new EventHandler<GrapeCity.Win.MultiRow.EditingControlShowingEventArgs>(gcMultiRow1_EditingControlShowing);
  6.         
  7.         }

  8.         void gcMultiRow1_EditingControlShowing(object sender, GrapeCity.Win.MultiRow.EditingControlShowingEventArgs e)
  9.         {
  10.             ComboBox com = e.Control as ComboBox;
  11.             com.DisplayMember = "Name";
  12.             com.ValueMember = "Code";

  13.         }
复制代码
下面是完整的工程,供参考。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
shizuka
银牌会员   /  发表于:2011-5-30 14:27:00
10#

回复 9# barrylei 的帖子

不好意思,不知道为什么,和你的一样,只不过我做的是VB.NET,但是实现不了CODE表示.
下面是具体的代码.
Imports GrapeCity.Win.MultiRow

Public Class MyComboBoxCell
    Inherits ComboBoxCell


    Public Overrides ReadOnly Property EditType() As Type
        Get
            Return GetType(MyComBox)
        End Get
    End Property

End Class


Public Class MyComBox
    Inherits ComboBoxEditingControl

    Public Overrides Property FormattedValue() As Object
        Get
            Return MyBase.SelectedValue
        End Get
        Set(ByVal value As Object)
            MyBase.FormattedValue = value
        End Set
    End Property
End Class
回复 使用道具 举报
1234下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部