Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ C#.docx
Скачиваний:
16
Добавлен:
20.11.2019
Размер:
1.85 Mб
Скачать

4.4.4. Форматированный ввод/вывод двумерного массива

Приведенные выше примеры ввода массивов легки в реализации, но требуют от пользователя большой аккуратности при наборе данных. Имеется и возможность форматированного ввода/вывода массивов. Ограничимся рассмотрением двумерного массива, упростить приводимый пример для одномерного случая не составляет труда. Рассмотрим реализацию формы, приведенной на рис. 4.3. Кроме знакомых нам компонентов занесем на форму компонент DataGridView из группы Data и дадим ему имя Gr1. Этот компонент служит для представления таблицы (по сути двумерного массива) на форме. Для внутреннего представления двумерного массива объявим потомок стандартного класса DataTable и уточним его свойства.

Рис. 4.3

Разрешается кроме класса Form1, который создается автоматический, иметь и собственные классы, но их объявления должны всегда быть после Form1. Так поступим и мы: класс Dt, потомок DataTable имеется в конце. Ничего нового мы в потомок не добавим, кроме конструктора, который должен передать единственный параметр конструктору класса – предка.

В состав класса Form1 добавим функцию InitGrid с двумя параметрами: количество строк и количество столбцов. Эта функция определяет свойства создаваемой таблицы и связывает ее с представлением на форме. Для начальной инициализации таблицы включим ее вызов в конструктор класса Form1.

namespace WA1

{

public partial class Form1 : Form

{

Dt Tabel;

void InitGrid(int n, int m)

{

Tabel = new Dt();

DataColumn x2 = Tabel.Columns.Add("First", typeof(Int32));

// создание первого столбца, параметры: заглавие и тип данных

DataColumn x1;

for (int i = 0; i < m; i++)

{ //создание остальных столбцов, параметры те же

x1 = Tabel.Columns.Add("Col " + (i + 1), typeof(Int32));

x1.DefaultValue = 0; // значение по умолчанию

}

for (int i = 0; i < n; i++)

{ //создание срок

DataRow y = Tabel.NewRow();

Tabel.Rows.Add(y);

Tabel.Rows[i][0] = i;

// номера строк в записываютсяпервый столбец

}

x2.ReadOnly = true; // первый столбец для номеров строк, туда

// нельзя ввести данные

Gr1.DataSource = Tabel;// установим связь между внутренним и

// внешним представлениями таблиц

}

public Form1()

{ // конструктор Form1

InitializeComponent();

InitGrid(3, 4); //создание начальной таблицы

}

private void In1_Click(object sender, EventArgs e)

{ // изменение количества строк и столбцов

int k,n;

k = Convert.ToInt32(textBox1.Text); //Количество строк

n = Convert.ToInt32(textBox2.Text); //Количество столбцов

InitGrid(k, n);

}

private void First_Click(object sender, EventArgs e)

{ //обработка данных из таблицы, результат - число

int sum = 0;

for (int i = 0; i < Tabel.Rows.Count ; i++)

for (int j = 1; j < Tabel.Columns.Count; j++)

sum += Convert.ToInt32(Tabel.Rows[i][j]);

rezult.Text=Convert.ToString(sum);

}

private void Second_Click(object sender, EventArgs e)

{ // обработка таблицы, результат - массив

int y,z = 3;

for (int i = 0; i < Tabel.Rows.Count ; i++)

for (int j = 1; j < Tabel.Columns.Count; j++)

{

y = Convert.ToInt32(Tabel.Rows[i][j]);

y += z;

Tabel.Rows[i][j] = Convert.ToString(y);

}

}

private void button1_Click(object sender, EventArgs e)

{

Close();

}

}

class Dt : DataTable

{//класс для внутреннего представления таблицы

public Dt() : base("Table") { } //Dt конструктор

} }

Примечания.

  1. Нумерация строк и столбцов начинается с нуля. Нулевой столбец мы используем для номеров строк, поэтому при обработке минимальное значение номеров столбцов равно единице, а номеров строк – нулю. Первая строка считается стандартной и она в нумерацию не входит.

  2. Компонент DataGridView предназначен и для представления данных из баз данных (реляционных таблиц), этим и объясняется необходимость указывать для каждого столбца тип данных. Явные преобразования типов данных тем не менее обязательны!

  3. На рис. 4.3. форма показана после нажатия кнопки «Сумма».