@@ -350,10 +350,8 @@ def __init__(self, dataframe, **kwargs):
350350 # set by the user.
351351 if "index_name" in kwargs :
352352 self ._index_name = kwargs ["index_name" ]
353- elif dataframe .index .name is not None :
354- self ._index_name = dataframe .index .name
355353 else :
356- self ._index_name = "key"
354+ self ._index_name = None
357355
358356 self .data = dataframe
359357 super ().__init__ (** kwargs )
@@ -465,10 +463,29 @@ def data(self, dataframe):
465463 self .__dataframe_reference_columns = dataframe .columns
466464 dataframe = dataframe .copy ()
467465
466+ # Primary key used
467+ index_key = self .get_dataframe_index (dataframe )
468+
468469 self ._data = self .generate_data_object (
469- dataframe , "ipydguuid" , self . _index_name
470+ dataframe , "ipydguuid" , index_key
470471 )
471472
473+ def get_dataframe_index (self , dataframe ):
474+ """Returns a primary key to be used in ipydatagrid's
475+ view of the passed DataFrame"""
476+
477+ # Passed index_name takes highest priority
478+ if self ._index_name is not None :
479+ return self ._index_name
480+
481+ # Dataframe with names index used by default
482+ if dataframe .index .name is not None :
483+ return dataframe .index .name
484+
485+ # If no index_name param, nor named-index DataFrame
486+ # have been passed, revert to default "key"
487+ return "key"
488+
472489 def get_cell_value (self , column_name , primary_key_value ):
473490 """Gets the value for a single or multiple cells by column name and index name.
474491
@@ -629,9 +646,12 @@ def selected_cell_values(self):
629646 # Copy of the front-end data model
630647 view_data = self .get_visible_data ()
631648
649+ # Get primary key from dataframe
650+ index_key = self .get_dataframe_index (view_data )
651+
632652 # Serielize to JSON table schema
633653 view_data_object = self .generate_data_object (
634- view_data , "ipydguuid" , self . _index_name
654+ view_data , "ipydguuid" , index_key
635655 )
636656
637657 return SelectionHelper (
0 commit comments