我在表单中有一个xtraGrid套件的GridView控件。 当我第一次打开表单时,它是AllowEdit = false。我希望当我按下添加新的行链接(由控件内置)以使这个唯一的新插入行可编辑时。我读到我应该使用ShowingEditor事件,但我不知道如何。 到目前为止我写了这个,但这不能编辑行:
private void gridViewNote_ShowingEditor(object sender, System.ComponentModel.CancelEventArgs e)
{
//this is first tryout
//if (gridViewNote.IsNewItemRow(gridViewNote.FocusedRowHandle))// == gridViewNote.GetFocusedDataRow())
//{
// gridColumnStagione.OptionsColumn.AllowEdit = true;
//}
//second tryout
GridView view = sender as GridView;
SchedeMaterialiDaTaglioDS.SMTAGL_NOTERow currentRow = gridViewNote.GetFocusedDataRow() as SchedeMaterialiDaTaglioDS.SMTAGL_NOTERow;
SchedeMaterialiDaTaglioDS.SMTAGL_NOTEDataTable changesTable = dsSchMatTaglio.SMTAGL_NOTE.GetChanges() as SchedeMaterialiDaTaglioDS.SMTAGL_NOTEDataTable;
e.Cancel = !view.IsNewItemRow(view.FocusedRowHandle) &&
!changesTable.Contains(currentRow);// set.Inserts.Contains(order);
}
答案 0 :(得分:3)
我希望我理解你的问题。一些简单的方法:
将存储库项添加到每个列并使用ShowingEditor
处理e.Cancel
事件,如果这应该是只读的话。
弹出一个窗口/文本框,让用户插入值并添加已经通过代码插入的值的行。
使用gridView.CustomRowCellEdit
事件将两个不同的存储库项目分配到同一列。像这样:
RepositoryItemTextEdit rep = new RepositoryItemTextEdit();
RepositoryItemTextEdit noRep = new RepositoryItemTextEdit();
noRep.ReadOnly = true;
private void button1_Click(object sender, EventArgs e)
{
gridView1.AddNewRow();
justAddedName = true;
gridView1.RefreshData();
}
private void gridView1_CustomRowCellEdit(object sender, DevExpress.XtraGrid.Views.Grid.CustomRowCellEditEventArgs e)
{
if (e.Column == colname)
{
if (e.RowHandle == gridView1.RowCount - 1 && justAddedName)
{
e.RepositoryItem = rep;
}
else
{
e.RepositoryItem = noRep;
}
}
}
这不完整,只是探索的方向。
希望我帮助过。