找回密码
 立即注册

QQ登录

只需一步,快速开始

nelsen

高级会员

14

主题

52

帖子

1384

积分

高级会员

积分
1384

活字格认证微信认证勋章

nelsen
高级会员   /  发表于:2010-11-1 10:12  /   查看:10239  /  回复:11
假设列表中有五行数据,每次只允许其中的一行为默认选项,请问应如何处理

11 个回复

倒序浏览
barrylei
中级会员   /  发表于:2010-11-1 11:01:00
沙发
不好意思,问题理解的不是太清楚,您能解释一下什么是 "每次只允许其中的一行为默认选项" 吗?特别是“默认选项”, 这将帮助我们更好的理解和回答你的问题。
回复 使用道具 举报
nelsen
高级会员   /  发表于:2010-11-1 11:24:00
板凳

回复 2# barrylei 的帖子

怎么说呢,就像有一个企业,他分两个单位名称,一般情况下都是选其中一个单位名称作为默认的单位,当选择另外一个单位名称时,另外那个位位就作为默认值,原先的那个就要取消
回复 使用道具 举报
nelsen
高级会员   /  发表于:2010-11-1 11:28:00
地板
就像附图中那样,第一列只允许其中一行可以为真,当选择其中一行作为默认项时,这一行就为真,其它行的值都为假。也就是第一列中的值是单选项

本帖子中包含更多资源

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

x
回复 使用道具 举报
barrylei
中级会员   /  发表于:2010-11-1 12:10:00
5#
假定默认的那一列的CheckBoxCell的Name为“MyCheckBoxCell”,代码如下
  1.         private void gcMultiRow1_CellEditedFormattedValueChanged(object sender, GrapeCity.Win.MultiRow.CellEditedFormattedValueChangedEventArgs e)
  2.         {
  3.             if(e.CellName  == "MyCheckBoxCell" && (bool)((CheckBoxCell)this.gcMultiRow1.CurrentCell).EditedFormattedValue)
  4.             {
  5.                     for (int i = 0; i < this.gcMultiRow1.RowCount; i++)
  6.                     {
  7.                         if(i != e.RowIndex)
  8.                         this.gcMultiRow1.SetValue(i, "MyCheckBoxCell", false);
  9.                     }
  10.                 }
  11.             }
  12.         }
复制代码

CheckBoxCell里面不是嵌入的标准的CheckBox Control,所以我们需要用CellEditedFormattedValueChanged来判断它当前的值是True还是False,然后把其他的CheckBoxCell的值给清掉。
回复 使用道具 举报
nelsen
高级会员   /  发表于:2010-11-1 12:38:00
6#

回复 5# barrylei 的帖子

明白了,谢谢!
回复 使用道具 举报
nelsen
高级会员   /  发表于:2010-11-1 12:42:00
7#

回复 5# barrylei 的帖子

另外有个问题请教下,编编状态下,如果控制按回车键后移动当前光标到右边的单元格,到行尾后换到下一行(另外,能否处理成如果单元格有内容的就向右移,如果没内容的就停留在该单元格)
回复 使用道具 举报
barrylei
中级会员   /  发表于:2010-11-1 13:15:00
8#
》另外有个问题请教下,编编状态下,如果控制按回车键后移动当前光标到右边的单元格,到行尾后换到下一行

先回答这个问题,GcMultiRow有一个ShortcutKeyManager属性,缺省状态下,Enter键被分配了BeginEdit和EndEdit这2个Action,意思是按一下回车,进入编辑状态,再按一下,退出编辑状态。
如果要实现你说的这个Case,步骤如下
1. 在PropertyGrid上打开ShortcutKeyManger的TypeEditor
2. 删除Enter键的BeginEdit[img][/img]和EndEdit
3. 把MoveToNextCell 设置给Enter键(注意,你的表格里需要按TabIndex从左到右排列好,因为这个Action是按照TabIndex来走的)
4. 把GcMultiRow的EditMode设置为EditOnEnter,这样GcMultiRow总是在编辑状态。

本帖子中包含更多资源

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

x
回复 使用道具 举报
barrylei
中级会员   /  发表于:2010-11-1 13:35:00
9#
》另外,能否处理成如果单元格有内容的就向右移,如果没内容的就停留在该单元格

这个,需要自定义一个Action,实现我们的IAction接口,然后把自定义的Action付给MultiRow的Enter键,代码如下。

  1. namespace WindowsFormsApplication1
  2. {
  3.     public partial class Form1 : Form
  4.     {
  5.         public Form1()
  6.         {
  7.             InitializeComponent();
  8.         }

  9.         private void Form1_Load(object sender, EventArgs e)
  10.         {
  11.             //删除原有Enter键对应的Action
  12.             this.gcMultiRow1.ShortcutKeyManager.Unregister(Keys.Enter);
  13.             //给Enter键指定自定义的Action
  14.             this.gcMultiRow1.ShortcutKeyManager.Register(new MyAction(), Keys.Enter);
  15.         }
  16.     }
  17.    
  18.     //自定义一个Action
  19.     public class MyAction : IAction
  20.     {
  21.         #region IAction 成员

  22.         public bool CanExecute(GcMultiRow target)
  23.         {
  24.             return true;
  25.         }

  26.         public string DisplayName
  27.         {
  28.             get { return "MyAction"; }
  29.         }

  30.         public void Execute(GcMultiRow target)
  31.         {
  32.             //判断当前的Cell是否有内容,这里只做一个简单的判断,具体的判断依赖于你的业务逻辑
  33.             if (target.CurrentCell.EditedFormattedValue == null)
  34.             {
  35.                //do nothing
  36.             }
  37.             else
  38.             {   
  39.                 // 跳到下一个Cell,如果要在行内循环,或者跳到下一行,需要自己再写一点逻辑来指定CurrentCellPosition的新位置,这里只简单演示一下。
  40.                 int rowIndex = target.CurrentCell.RowIndex;
  41.                 int cellIndex = target.CurrentCell.TabIndex;
  42.                 target.CurrentCellPosition = new CellPosition(rowIndex, cellIndex + 1);
  43.             }
  44.         }

  45.         #endregion
  46.     }


  47. }
复制代码
回复 使用道具 举报
nelsen
高级会员   /  发表于:2010-11-1 21:50:00
10#

回复 9# barrylei 的帖子

明白了,谢谢
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部