Вы видите только данные строки из первой строки, потому что это то, что вы извлекаете, когда говорите ds.Tables[0].Rows[0]
- Строки [0] всегда будут первой строкой таблицы
Весь этот блок кода сбит с толку;
вы не можете отобразить несколько строк, используя одиночные метки - используйте компонент Grid и привязайте его к Dataatable.
Код использует al oop до go через строки таблицы, но проверяет, есть ли в таблице строки, внутри l oop (l oop не запускается если это не так), и вместо использования нумерованной строки он всегда получает доступ к первой строке при каждом проходе l oop.
Не используйте DataSet, просто создайте новый DataTable и заполните его - наборы данных предназначены для тех случаев, когда вы хотите работать с несколькими связанными таблицами данных, и в этом случае одна таблица бесполезна дополнительный слой.
- Не выполняйте по команде команду ExecuteNonQuery, это бесполезная операция - адаптер данных выполнит запрос во время заполнения, вам не нужно это делать (а ExecuteNonQuery предназначен для вставки / обновления / удаления / создать et c - это выбор).
Ваш код может выглядеть следующим образом:
DataTable dt = new DataTable();
da.Fill(dt);
gridControl.DataSource = dt;
gridControl.DataBind();
Вот и все. Весь остальной код (кроме команды и соединения) должен быть выброшен