An appropriate answer to your question can only be provided after knowing the way you are doing the data binding. Are you doing the data binding from the code by calling the .DataBind() method of the datalist or are you providing a datasource to the datalist to bind from. The reason i ask this question is that in case you are using the .DataBind() method of the datalist from the code for binding the datalist, you will have to call it on every postback to make sure that the datalist gets databound again. Otherwise after the post back you will see that the datalist shows up empty. In case you are providing a datasource to the datalist to bind from, using its DataSource or DataSourceId property, the databinding of the datalist on each post back is taken care of by the framework, you don't have to be concerned about that.
But from the look of things i believe that you are getting the value as null because you are trying to get the value of the DataItem at a wrong place. Remember that you will have to follow the proper life cycle of a control to make it work for you the way you want it to work.
I can provide better answer if you can answer my queries above. Your current statement seems insufficient for providing a relevant answer.