loacher 发表于 2012-12-18 10:53:00

设置了AllowUserToAddRows = True之后的问题,请教

第一,当光标放在NewRow上的时候,用鼠标点击其他控件,比如按钮,这个时候,MultiRow上的光标自动跳到Newrow的上一行
第二,通过其他画面把返回值设置在NewRow上之后,没有自动追加一行

请教,怎么解决?

loacher 发表于 2012-12-18 12:43:00

补充上面第二个问题
>>第二,通过其他画面把返回值设置在NewRow上之后,没有自动追加一行
光标离开NewRow之后,值被清空了

loacher 发表于 2012-12-19 09:37:00

请教,继续请教

wedy.wang 发表于 2012-12-19 10:21:00

》第一,当光标放在NewRow上的时候,用鼠标点击其他控件,比如按钮,这个时候,MultiRow上的光标自动跳到Newrow的上一行
这是微软数据绑定控件的设计规范,这是一个Design。DataGridView也有同样的设计。
》>>第二,通过其他画面把返回值设置在NewRow上之后,没有自动追加一行
光标离开NewRow之后,值被清空了

GcMultiRow在数据绑定模式不允许使用下面的代码GcMultiRow.Rows.Add()/Insert().我建议你在设置画面返回值到最后一行之前,先调用数据源的AddNew方法,添加一个新行,比如“this.categoriesBindingSource.AddNew()”, 然后再将你的画面返回值设置到倒数第二行。
参考下面的代码:
if (this.gcMultiRow1.CurrentCellPosition.RowIndex == this.gcMultiRow1.RowCount - 1)
            {
                this.gcMultiRow1.Value = "value";
                this.categoriesBindingSource.AddNew();
            }
            else
            {
                this.categoriesBindingSource.AddNew();
                this.gcMultiRow1.Value = "Value";
            }

loacher 发表于 2012-12-19 10:52:00

我也是经过试验,用数据源追加一行的办法,效果倒是实现了
只是,方法比较恶心
不知道是我哪里做的不对,数据源追加一行之后,明细会自动增加两行,只好在数据源增加一行后,再删除最后一空行

wedy.wang 发表于 2012-12-19 11:09:00

回复 5楼loacher的帖子

如果在你在数据源增加一行之前,你的CurrentCell被放置到了NewRow上面,那么就会增加两行,这是微软数据绑定控件的一个设计,的确不是很好。可以将上面的代码略做修改:
if (this.gcMultiRow1.CurrentCellPosition.RowIndex == this.gcMultiRow1.RowCount - 1)
            {
                EditingActions.CancelRowEdit.Execute(this.gcMultiRow1);
                this.categoriesBindingSource.AddNew();
                this.gcMultiRow1.Value = "value";
            }
            else
            {
                this.categoriesBindingSource.AddNew();
                this.gcMultiRow1.Value = "Value";
            }
页: [1]
查看完整版本: 设置了AllowUserToAddRows = True之后的问题,请教