[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;
}
}
但我想控制新记录可以修改,原记录不可修改,能实现吗? 新记录指用this.gcMultiRow1.Rows.Insert()刚刚添加,还未保存的记录。 请参考以下代码,希望对你有所帮助。
如果还有什么问题,欢迎继续讨论。
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;
} 感谢版主!
但这个方法只适合第一次点击新增行。
点击新增行后点别的行,再点新增行,新增行也会变得不可修改了。 试试看以下代码是否可以满足需求。
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";
}
} 测试可以了,多谢!
this.gcMultiRow1.Rows.Tag = "NewRow";
Rows后面的中括号i怎么无法显示出来,变成斜体了。 额,可能是论坛的Bug吧。或者【】是论坛的什么关键字。
this.gcMultiRow1.Rows.Tag = "NewRow";
再问一下,RadioGroupCell、CheckBoxCell如何像TextBoxCell一样,去实现这种效果呢? 偶在另一个事件里实现了这个功能,不用麻烦版主了。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]