I have a GDBG in which EnableAddNew is enabled.
The GDBG is bound to a DataSet that is populated by a DataAdaptor which is filled with the contents of a user-specified table (or view) from a database.
I wanted to prevent users from editing those columns which are part of either the primary key for the underlying table or one of the unique indexes for the table or a database view.
The following code is used to accomplish this (note that the _dbCmdBuilder class is a homegrown replacement for the CLRs CommandBuilder that corrects some limitations of that class):
for (int n = 1; n <= grid.Model.ColCount; n++ )
{
if ( _dbCmdBuilder.IsColumnReserved(n - 1) )
{
grid[-1,n].CellType = "static";
grid[-1,n].ReadOnly = true;
}
}
This works fine except that it also prevents users from editing those same columns when inserting a new row (in the insertion row at the bottom).
How can I keep all the cells in that bottom insertion row editable?
Thanks,
Andy
AD
Administrator
Syncfusion Team
October 29, 2004 02:11 PM UTC
One way to do this is to handle the grid.Model.QueryCellInfo event, and if e.ColIndex > 0 && e.RowIndex == grid.Model.RowCount, then set e.Style.Enabled = true and e.Style.CellType = "TextBox".
AD
Administrator
Syncfusion Team
October 29, 2004 03:06 PM UTC
Clay,
That works, almost. It does allow me to edit the first "key" column. But as soon as you start editing in a cell in the insert row, a new insert row is created which makes the row I''m in revert to non-editable for key columns.
This can create a problem if I have a row with multiple key-column cells that need values because after leaving the first key-column, the other cells have reverted to non-editable.
I''m considering having a seperate one-row, non-bound grid control above (or below) the GDBG in which users can add new rows... but that seems a bit drastic.
Andy
>One way to do this is to handle the grid.Model.QueryCellInfo event, and if e.ColIndex > 0 && e.RowIndex == grid.Model.RowCount, then set e.Style.Enabled = true and e.Style.CellType = "TextBox".
AD
Administrator
Syncfusion Team
October 29, 2004 03:12 PM UTC
I had a thought. Somewhere, probably in the ADO.NET stuff, there must be a flag marking new rows as needing to be inserted (via the INSERT statement set-up in the data adapter.
If I can figure out which rows in the grid match those rows in the datatable that are "insertable", then I can leave those editable until such time as the dataset is updated via the data-adaptor.
I don''t know the CLR or ADO.NET or the grid control''s binding mechanism well enough yet to know where to look for such a flag.
Any thoughts?
>Clay,
>
>That works, almost. It does allow me to edit the first "key" column. But as soon as you start editing in a cell in the insert row, a new insert row is created which makes the row I''m in revert to non-editable for key columns.
>
>This can create a problem if I have a row with multiple key-column cells that need values because after leaving the first key-column, the other cells have reverted to non-editable.
>
>I''m considering having a seperate one-row, non-bound grid control above (or below) the GDBG in which users can add new rows... but that seems a bit drastic.
>
>Andy
>
>>One way to do this is to handle the grid.Model.QueryCellInfo event, and if e.ColIndex > 0 && e.RowIndex == grid.Model.RowCount, then set e.Style.Enabled = true and e.Style.CellType = "TextBox".
AD
Administrator
Syncfusion Team
October 29, 2004 03:21 PM UTC
Try checking
if(e.ColIndex > 0 && (e.RowIndex == grid.Model.RowCount || grid.Binder.IsInAddNew))
{
//
}
MF
Mauro Fiore
October 31, 2004 02:47 PM UTC
Apologize me but where do I find the
GQueryCellInfo event in GridDataBoundGrid object?
thanks all,
Mauro.
AD
Administrator
Syncfusion Team
October 31, 2004 03:58 PM UTC
It is in the Model member, grid.Model.QueryCellInfo.
this.gridDataBoundGrid1.Model.QueryCellInfo += new GridQueryCellInfoEventHandler(Model_QueryCellInfo);