14. Editor: Unable to find row identifier

Editor requires that each row in a DataTable have a value that will uniquely identify that row. This is used when Editor submits edit and delete requests to the server so the server knows which row should be submitted.

The error:

Unable to find row identifier

will occur when Editor is unable to find the uniquely identifying value.

Meaning

Each row's uniquely identifying value is a piece of data that is included in the data when DataTables first loads the table. It is typically the database table's primary key value (an auto incrementing integer sequence for example) but it can be any other such as a UUID, a hash or a combination of fields.

By default Editor will look for this value in the property called DT_RowId for each row's data source object. For example, consider the following object that is used to populate a table:

{
    "DT_RowId":   "row_12",
    "first_name": "Tiger",
    "last_name":  "Nixon",
    "position":   "System Architect",
},

In this case the DT_RowId property value is row_12 which will be used as the value that will uniquely identify the row to the server.

If this property does not exist in the data source for each row, the error "Unable to find row identifier" may occur.

Resolution

The key to fixing this issue is to ensure that the unique identifier information (usually the primary key value) is present in the data sent from the server. The data property need not be called DT_RowId, but the data must be present. If the unique identifier is not present, the server-side script must be updated to include this information. The pre-built PHP and .NET libraries automatically use the table's primary key column and alias that to DT_RowId.

If your unique identifier information is not under the name DT_RowId, but is under some other data property name, use the idSrc option to tell Editor where to find it.

In the following example idSrc is used to tell Editor to read the unique row value from the data property id:

var editor = new $.fn.dataTable.Editor( {
    ajax:   '/api/staff',
    table:  '#myTable',
    idSrc:  'id',
    fields: [ ... ]
} );

An example of this is available on the Editor site.