if(dtData.Rows[0]["Column1"].Equals(1))
Try if this works, if yes, it was just you comparing string to integer, otherwise problem is elsewhere.
EDIT:
So after some testing this is what I got:
Integer.Equals() will return true even if you try another direct type which is shorter byte-wise, for example Short or Byte, as long as their value is same.
Same goes for Short, if you try to Equal to Byte with same value it returns true, but if you try to Equal to Integer, who is longer it will fail.
But this looks like it doesn't apply when you use value directly.
Demonstration
int i = 1;
short s = 1;
byte b = 1;
Console.WriteLine(i.Equals(1));
Console.WriteLine(s.Equals(1));
Console.WriteLine(b.Equals(1));
Console.WriteLine((1).GetType().ToString());
Console.WriteLine(i.Equals(s));
Console.WriteLine(s.Equals(i));
The problem you have is that Integer.Equals is not same Object.Equals (or ValueType.Equals according to MSDN, not sure which is used though), which will also check for type and as Praveen Kumar Upadhyay commented your dtData.Rows is probably array of objects, after trying out GetType even if it sais it's Int16 or Int32 or whatever it will still use Object.Equals instead of the respected method of the types it sais it is.
Notice I checked what type a number 1 is, it's System.Int32 and now when we also compare type we run into this.
The situation you are in is like this:
Console.WriteLine(((object)i).Equals(1));
Console.WriteLine(((object)s).Equals(1));
Console.WriteLine(((object)b).Equals(1));
And way to fix it is
Console.WriteLine(((object)i).Equals(1));
Console.WriteLine(((object)s).Equals((short)1));
Console.WriteLine(((object)b).Equals((byte)1));