Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на языке C# в среде Microsoft VS 2005.doc
Скачиваний:
65
Добавлен:
28.06.2014
Размер:
2.38 Mб
Скачать

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

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

Рис. 4.3

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

namespace WA1

{

public partial class Form1 : Form

{

DataTable Tabel;

void InitGrid(int n, int m)

{

Tabel = new DataTable();

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+1;

}

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

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

Gr1.DataSource = Tabel;

}

public Form1()

{

InitializeComponent();

InitGrid(3, 4);

//создание начальной таблицы

}

private void In1_Click(object sender, EventArgs e)

{ // инициализация таблицы, ее имя Tabel

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();

} } }

Примечания.

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

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

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