找回密码
 立即注册

QQ登录

只需一步,快速开始

pcsky

论坛元老

3

主题

23

帖子

7311

积分

论坛元老

积分
7311

活字格认证

最新发帖
pcsky
论坛元老   /  发表于:2012-4-23 10:46  /   查看:6501  /  回复:8
MultiRow的文档中有这个例子:
指定 Cell 的编辑控件为只读,这样不管新老记录都变成只读了。
using GrapeCity.Win.MultiRow;

private void gcMultiRow1_EditingControlShowing(object sender, EditingControlShowingEventArgs e)
{
    if (e.Control is TextBoxEditingControl)
    {
        (e.Control as TextBoxEditingControl).ReadOnly = true;
    }
}

但我想控制新记录可以修改,原记录不可修改,能实现吗?

8 个回复

倒序浏览
pcsky
论坛元老   /  发表于:2012-4-23 10:48:00
沙发
新记录指用this.gcMultiRow1.Rows.Insert()刚刚添加,还未保存的记录。
回复 使用道具 举报
robert
金牌服务用户   /  发表于:2012-4-23 15:26:00
板凳
请参考以下代码,希望对你有所帮助。
如果还有什么问题,欢迎继续讨论。
int insertingRow = -1;

void gcMultiRow1_EditingControlShowing(object sender, EditingControlShowingEventArgs e)
{
    if (e.Control is TextBoxEditingControl)
    {
        if (this.gcMultiRow1.CurrentCellPosition.RowIndex != insertingRow)
        {
            (e.Control as TextBoxEditingControl).ReadOnly = true;
        }
        else
        {
            (e.Control as TextBoxEditingControl).ReadOnly = false;
        }
    }
}

void gcMultiRow1_RowValidated(object sender, CellEventArgs e)
{
    if (e.RowIndex == insertingRow)
    {
        insertingRow = -1;
    }
}

private void button1_Click(object sender, EventArgs e)
{
    this.gcMultiRow1.Rows.Insert(0);
    insertingRow = 0;
}
回复 使用道具 举报
pcsky
论坛元老   /  发表于:2012-4-23 21:04:00
地板
感谢版主!

但这个方法只适合第一次点击新增行。
点击新增行后点别的行,再点新增行,新增行也会变得不可修改了。
回复 使用道具 举报
robert
金牌服务用户   /  发表于:2012-4-24 12:27:00
5#
试试看以下代码是否可以满足需求。

void gcMultiRow1_EditingControlShowing(object sender, EditingControlShowingEventArgs e)
{
    if (e.Control is TextBoxEditingControl)
    {
        if (!object.Equals(this.gcMultiRow1.CurrentRow.Tag, "NewRow"))
        {
            (e.Control as TextBoxEditingControl).ReadOnly = true;
        }
        else
        {
            (e.Control as TextBoxEditingControl).ReadOnly = false;
        }
    }
}

private void button1_Click(object sender, EventArgs e)
{
    this.gcMultiRow1.Rows.Insert(0, 10);
    for (int i = 0; i < 10; i++)
    {
        this.gcMultiRow1.Rows.Tag = "NewRow";
    }
}
回复 使用道具 举报
pcsky
论坛元老   /  发表于:2012-4-24 15:40:00
6#
测试可以了,多谢!

this.gcMultiRow1.Rows.Tag = "NewRow";
Rows后面的中括号i怎么无法显示出来,变成斜体了。
回复 使用道具 举报
robert
金牌服务用户   /  发表于:2012-4-24 15:55:00
7#
额,可能是论坛的Bug吧。或者【】是论坛的什么关键字。
  1. this.gcMultiRow1.Rows[i].Tag = "NewRow";
复制代码
回复 使用道具 举报
pcsky
论坛元老   /  发表于:2012-4-29 11:07:00
8#
再问一下,RadioGroupCell、CheckBoxCell如何像TextBoxCell一样,去实现这种效果呢?
回复 使用道具 举报
pcsky
论坛元老   /  发表于:2012-4-29 11:17:00
9#
偶在另一个事件里实现了这个功能,不用麻烦版主了。
  1. private void gcMultiRow1_SelectionChanged(object sender, EventArgs e)
  2. {
  3.         if (!object.Equals(this.gcMultiRow1.CurrentRow.Tag, "NewRow"))
  4.         {
  5.                 gcMultiRow1.CurrentCell.ReadOnly = true;
  6.         }
  7.         else
  8.         {
  9.                 gcMultiRow1.CurrentCell.ReadOnly = false;
  10.         }
  11. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部