Pergunta

I have a GridView control of xtraGrid suite in a form. When I open the form for first time it is AllowEdit = false. I want that when I press on add new row link(built in by control) to make editable this only new inserted row. I read that I should use ShowingEditor event but I don't know how. I wrote this so far but this does not editable the row:

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

        }
Foi útil?

Solução

I hope I understood your question. A few simple ways of doing this:

  1. Adding a repository item to each column and handle the ShowingEditor event, using e.Cancel if this is supposed to be read only.

  2. Popping up a window/textboxes, letting the user insert values and add the row with values already inserted via code.

  3. assigning two different repository items to the same column using gridView.CustomRowCellEdit event. like such:

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

It's not complete, just a direction to explore.

Hope I helped.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top