Followed the video for fun, great exercise.

I'm not a coder or math's guy but added this to check when someone Wins.

Added Columns 'Score' to the table.

X scores 1
O scores 4.

So 3 in a row would sum to 3 or 12

If(gvState=IMageX,Set(gvScore,1),Set(gvScore,4));
Patch(MyGame,First(Filter(MyGame,Code=ThisItem.Code)),{State:gvState, Score:gvScore});If(gvState=IMageO,Set(gvState,IMageX),Set(gvState,IMageO));
Set(gvRow1,Sum(Filter(MyGame,Row=1),Score));
Set(gvRow2,Sum(Filter(MyGame,Row=2),Score));
Set(gvRow3,Sum(Filter(MyGame,Row=3),Score));
Set(gvCol1,Sum(Filter(MyGame,Column="A"),Score));
Set(gvCol2,Sum(Filter(MyGame,Column="B"),Score));
Set(gvCol3,Sum(Filter(MyGame,Column="A"),Score));
Set(gvDia1,Sum(Filter(MyGame,Code="A1" || Code="B2" || Code="C3"),Score));
Set(gvDia2,Sum(Filter(MyGame,Code="A3" || Code="B2" || Code="C1"),Score));
Switch(gvRow1, 3, Set(gvWin,"X"), 12, Set(gvWin, "O"));
Switch(gvRow2, 3, Set(gvWin,"X"), 12, Set(gvWin, "O"));
Switch(gvRow3, 3, Set(gvWin,"X"), 12, Set(gvWin, "O"));
Switch(gvCol1, 3, Set(gvWin,"X"), 12, Set(gvWin, "O"));
Switch(gvCol2, 3, Set(gvWin,"X"), 12, Set(gvWin, "O"));
Switch(gvCol3, 3, Set(gvWin,"X"), 12, Set(gvWin, "O"));
Switch(gvDia1, 3, Set(gvWin,"X"), 12, Set(gvWin, "O"));
Switch(gvDia2, 3, Set(gvWin,"X"), 12, Set(gvWin, "O"))