pcsky 发表于 2012-4-23 10:46:00

[MultiRow6.0]如何实现只录入新记录,原记录不可修改

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;
    }
}

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

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

试试看以下代码是否可以满足需求。

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

测试可以了,多谢!

this.gcMultiRow1.Rows.Tag = "NewRow";
Rows后面的中括号i怎么无法显示出来,变成斜体了。

robert 发表于 2012-4-24 15:55:00

额,可能是论坛的Bug吧。或者【】是论坛的什么关键字。

this.gcMultiRow1.Rows.Tag = "NewRow";

pcsky 发表于 2012-4-29 11:07:00

再问一下,RadioGroupCell、CheckBoxCell如何像TextBoxCell一样,去实现这种效果呢?

pcsky 发表于 2012-4-29 11:17:00

偶在另一个事件里实现了这个功能,不用麻烦版主了。private void gcMultiRow1_SelectionChanged(object sender, EventArgs e)
{
      if (!object.Equals(this.gcMultiRow1.CurrentRow.Tag, "NewRow"))
      {
                gcMultiRow1.CurrentCell.ReadOnly = true;
      }
      else
      {
                gcMultiRow1.CurrentCell.ReadOnly = false;
      }
}
页: [1]
查看完整版本: [MultiRow6.0]如何实现只录入新记录,原记录不可修改