Вы перезаписываете значение сеанса каждый цикл до последнего элемента, потому что неправильно обрабатываете строку concact.
Вы должны помнить, что строки неизменны - когда вы меняете их, добавляя новую строку в конец, результатом является новая строка, а не модификация оригинала.Вот почему + + изменение работает, оно сохраняет новый результат конкатенации в исходной строке.
ArrayList demo = new ArrayList();
demo.Add(tbxProjName.Text);
string DatabaseFieldValues;
foreach (string dataType in demo)
{
DatabaseFieldValues += dataType + ",";
Response.Write(DatabaseFieldValues);
}
Session["DatabaseFieldValuesSession"] = DatabaseFieldValues;
Response.Write(Session["DatabaseFieldValuesSession"]);
Также я бы предложил перейти от ArrayList
в строго типизированную коллекцию
IList<string> demo = new List<string>();
demo.Add(tbxProjName.Text);
Session["DatabaseFieldValuesSession"] = string.Join(",",demo);
Response.Write(Session["DatabaseFieldValuesSession"]);