The problem with an array is all the elements (rows and columns) have to be of the same type. I see that you are changing each of the data elements to strings so you have that covered. But, you might consider making a simple class that holds the data from the textbox controls. Each of the attributes of the class can be of the native type so you no longer need to convert data to strings to save and from strings to work with it. Now you only need a single dimensioned array of this new class type.
The next problem with an array is you need to manage allocating and expanding the array as you add rows. C# has a collection class called List that would work well for your case. It can be indexed directly like an array but you can add or insert rows as you need and it handles the allocation and expansion of the list as needed so you can concentrate on what to do with the data.
Now your code becomes:
class ExpData
{
}
List expList = new List<ExpData>;
ExpData exp = new ExpData(textbox1 value, ...);
List.add(exp);
When you need to work with the saved data you just get the class instance at the List index you want and do your thing.