Most of your problem is with
string[] strlist = list[i].Split('.',':');
On the lines containing a date and time you are splitting the time section into pieces and not reconstructing it.
As PIEBALDconsult tried to guide you, the section for "Alarm ended" contains everything you need.
The file is also a fixed format, so once you have found the right section you can apply rules to how to get the lines containing the rest of the information.
1. The [Guid] can be obtained from the line containing text "Alarm ended"
2. The [Start Time] will be on the next line after "Alarm ended"
3. The [End Time] will be on the line after the line after "Alarm ended"
4. The data for each column will start after the first instance of ": "
5. The data for each column will end at the end of each line.
Which translates to
string filename = @"c:\temp\DvrAlarmLog.txt";
if (!File.Exists(filename)) return;
var dt = new DataTable();
dt.Columns.AddRange(new[] { new DataColumn("ID"), new DataColumn("Start Date"), new DataColumn("End Date") });
var lines = File.ReadAllLines(filename);
for (var i = 0; i < lines.Length; i++)
{
if (!lines[i].Contains("Alarm ended")) continue;
var currGuid = lines[i].Substring(lines[i].IndexOf(":", StringComparison.InvariantCultureIgnoreCase) + 2);
var startTime = lines[i + 1].Substring(lines[i + 1].IndexOf(":", StringComparison.InvariantCultureIgnoreCase) + 2);
var endTime = lines[i+2].Substring(lines[i+2].IndexOf(":", StringComparison.InvariantCultureIgnoreCase) + 2);
dt.Rows.Add(currGuid, startTime, endTime);
}
GridView1.DataSource = dt;
GridView1.DataBind();