При выполнении данной курсовой работы был изучен класс DataView, основная функциональность которого заключается в полном или частичном отображение данных из DataTable. Данный класс может с успехом применяться для визуальных приложений и web-приложений.
Необходимость использования данного класса зависит от постановки задачи. В случае использовании наборов данных. Объекты – представители класса DataView не предназначены для организации визуализации объектов DataTable. Их назначение – простой последовательный доступ к строкам таблицы. Объекты DataView являются средством перебора записей таблицы. DataView предоставляет средства динамического представления набора данных, к которому можно применить различные варианты сортировки и фильтрации на основе критериев.
Пригодность использования класса для данных целей, была проверена на тестовых примерах. Для создания тестовых примеров была изучена основная информация по данному классу. После успешного выполнения всех тестовых примеров можно сделать вывод, что DataView является гибким средством отображения данных хранящихся в DataTable. Еще одним положительным качество класса является то, что логика его работы не зависит от источника данных связанного DataTable. Структура DataTable может быть как связанной с таблицей базы данных, так и создана внутри приложения, как это было сделано в наших примерах.
Список литературы
1. Сайт Русского MSDN, http://msdn.microsoft.com/
2. Карли Ватсон, «С#», Издательство «Лори», 2005.
3. Герберт Шилдт, «Полный справочник по С#», Издательский дом "Вильяме", 2004.
4. Карли Уотсон, Кристиан Нейгел, «Microsoft Visual C# 2008 Базовый курс», Издательский дом "Диалектика", 2008.
Приложение 1
Программный код примера №1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace DataViewConsoleMSDNExpample
{
class Program
{
static void DemonstrateDataView()
{
// Create one DataTable with one column.
DataTable table = new DataTable("table");
DataColumn colItem = new DataColumn("item",
Type.GetType("System.String"));
table.Columns.Add(colItem);
// Add five items.
DataRow NewRow;
for (int i = 0; i < 5; i++)
{
NewRow = table.NewRow();
NewRow["item"] = "Item " + i;
table.Rows.Add(NewRow);
}
// Change the values in the table.
table.Rows[0]["item"] = "cat";
table.Rows[1]["item"] = "dog";
table.AcceptChanges();
// Create two DataView objects with the same table.
DataView firstView = new DataView(table);
DataView secondView = new DataView(table);
// Print current table values.
PrintTableOrView(table, "Current Values in Table");
// Set first DataView to show only modified
// versions of original rows.
firstView.RowStateFilter = DataViewRowState.ModifiedOriginal;
// Print values.
table.Rows[2]["item"] = "hourse";
PrintTableOrView(firstView, "First DataView: ModifiedOriginal");
// Add one New row to the second view.
DataRow rowAdd;
rowAdd = table.NewRow();
rowAdd["item"] = "fish";
table.Rows.Add(rowAdd);
// Set second DataView to show modified versions of
// current rows, or New rows.
secondView.RowStateFilter = DataViewRowState.ModifiedCurrent
| DataViewRowState.Added;
// Print modified and Added rows.
PrintTableOrView(secondView,
"Second DataView: ModifiedCurrent | Added");
table.AcceptChanges();
PrintTableOrView(table, "Current Values in Table");
}
static void PrintTableOrView(DataTable table, string label)
{
// This function prints values in the table or DataView.
Console.WriteLine("\n" + label);
for (int i = 0; i < table.Rows.Count; i++)
{
Console.WriteLine("\t " + table.Rows[i]["item"]);
}
Console.WriteLine();
}
static void PrintTableOrView(DataView view, string label)
{
// This overload prints values in the table or DataView.
Console.WriteLine("\n" + label);
for (int i = 0; i < view.Count; i++)
{
Console.WriteLine("\t " + view[i]["item"]);
}
Console.WriteLine();
}
static void Main(string[] args)
{
DemonstrateDataView();
Console.ReadLine();
}
}
}
Приложение 2
Программный код примера №2
using System;
using System.Data;
class Program
{
static void Main()
{
//
// Specify the column to sort on.
//
DataTable table = GetTable();
table.DefaultView.Sort = "ID";
//
// Display all records in the view.
//
DataView view = table.DefaultView;
Console.WriteLine("=== Sorted by ID ===");
for (int i = 0; i < view.Count; i++)
{
Console.WriteLine("{0},\t {1},\t {2}",
view[i][0],
view[i][1],
view[i][2]);
}
//
// Now sort on the Name.
//
view.Sort = "Town";
//
// Display all records in the view.
//
Console.WriteLine("=== Sorted by Town ===");
for (int i = 0; i < view.Count; i++)
{
Console.WriteLine("{0},\t {1},\t {2}",
view[i][0],
view[i][1],
view[i][2]);
}
Console.ReadLine();
}
/// <summary>
/// This example method generates a DataTable.
/// </summary>
static DataTable GetTable()
{
//
// Here we create a DataTable with four columns.
//
DataTable table = new DataTable();
table.Columns.Add("ID", typeof(int));
table.Columns.Add("County", typeof(string));
table.Columns.Add("Town", typeof(string));
//
// Here we add unsorted data to the DataTable and return.
//
table.Rows.Add(1, "Россия", "Санкт-Петербург");
table.Rows.Add(2, "Россия", "Ставрополь");
table.Rows.Add(3, "Германия", "Бремен");
table.Rows.Add(15, "Россия", "Белгород");
table.Rows.Add(24, "Польша", "Прага");
return table;
}
}
Приложение 3
Программный код примера №3
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace DataViewPrimer
{
public partial class Form1 : Form
{
DataTable dt; // Таблица.
DataColumn c1, c2; // Столбцы таблцы.
DataRow dr; // Строка таблицы.
DataView dv; // Вьюер таблицы.
DataRowView rv; // Вьюер строки таблицы.
int currentCounter; // Счетчик текущей строки для вьюера таблицы.
public Form1()
{
InitializeComponent();
CreateTable();
dG.DataSource = dv;
dGforTable.DataSource = dt;
currentCounter = 0;
rv = dv[currentCounter];
demoTextBox.Text = rv["Cyti"].ToString();
}
private void CreateTable()
{
dt = new DataTable("Cyti");
c1 = new DataColumn("id", Type.GetType("System.Int32"));
c1.AutoIncrement = true;
c2 = new DataColumn("Cyti", Type.GetType("System.String"));
dt.Columns.Add(c1);
dt.Columns.Add(c2);
DataColumn[] keyCol = new DataColumn[1];
keyCol[0] = c1;
dt.PrimaryKey = keyCol;
dr = dt.NewRow();
dr["Cyti"] = "Москва";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["Cyti"] = "Санкт-Петербург";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["Cyti"] = "Прага";
dt.Rows.Add(dr);
dt.AcceptChanges();
DataViewRowState dvrs = DataViewRowState.Added |
DataViewRowState.CurrentRows |
DataViewRowState.Deleted |
DataViewRowState.ModifiedCurrent |
DataViewRowState.Unchanged;
dv = new DataView(dt, "", "Cyti", dvrs);
}
private void buttPrev_Click(object sender, EventArgs e)
{
if (currentCounter - 1 >= 0) currentCounter--;
rv = dv[currentCounter];
demoTextBox.Text = rv["Cyti"].ToString();
}
private void buttNext_Click(object sender, EventArgs e)
{
if (currentCounter + 1 < dv.Count) currentCounter++;
rv = dv[currentCounter];
demoTextBox.Text = rv["Cyti"].ToString();
}
private void buttFirst_Click(object sender, EventArgs e)
{
currentCounter = 0;
rv = dv[currentCounter];
demoTextBox.Text = rv["Cyti"].ToString();
}
private void buttLast_Click(object sender, EventArgs e)
{
currentCounter =dv.Count - 1;
rv = dv[currentCounter];
demoTextBox.Text = rv["Cyti"].ToString();
}
private void dG_MouseDown(object sender, MouseEventArgs e)
{
currentCounter = dG.CurrentRowIndex;
rv = dv[currentCounter];
demoTextBox.Text = rv["Cyti"].ToString();
}
private void buttonFind_Click(object sender, EventArgs e)
{
int findIndex = -1;
findIndex = dv.Find(findTextBox.Text);
if (findIndex >= 0)
{
currentCounter = findIndex;
rv = dv[currentCounter];
demoTextBox.Text = rv["Cyti"].ToString();
}
else
{
findTextBox.Text = "Не нашли.";
}
}
private void buttonAdd_Click(object sender, EventArgs e)
{
if (rv.IsEdit || rv.IsNew) return;
rv = dv.AddNew();
rv["Cyti"] = findTextBox.Text;
}
private void buttonAcc_Click(object sender, EventArgs e)
{
rv.EndEdit();
dt.AcceptChanges();
}
}
}