You should have a wrapper class inside your controller that holds the custom object row and the flag:
public class TestTaskController1 {
public class ReportInformation{
public Report_Information__c task{get;set;}
public Boolean saved{get;set;}
}
public List<ReportInformation> reportInfos{get;set;}
...
}
Then on your page, you can display read-only vs editable view of the row like this:
<apex:pageBlockTable value="{!reportInfos}" var="rInfo">
<apex:column headerValue="Report Name">
<apex:outputField value="{!rInfo.task.Report_Name__c}" rendered="{!rInfo.saved}"/>
<apex:inputField value="{!rInfo.task.Report_Name__c}" rendered="{!NOT(rInfo.saved)}"/>
</apex:column>
<br/>
<apex:column headerValue="Comments">
<apex:outputField value="{!rInfo.task.Comments__c}" rendered="{!rInfo.saved}"/>
<apex:inputField value="{!rInfo.task.Report_Name__c}" rendered="{!NOT(rInfo.saved)}"/>
<br />
</apex:column>
</apex:pageBlockTable>
UPDATE:
In the constructor, set them all to false, so the input fields are displayed. Then in your action method, set it to true. You should have a list of ReportInformation items like I have in my answer. Iterate over your results from Report_Information__c and then add to the reportInfos list.
for(Report_Information__C ri: [select id,... from Report_Information__C])
{
ReportInformation repInfo = new ReportInformation();
repInfo.saved = false;
repInfo.task = ri;
repInfos.add(repInfo);
}
HTH