Stack Overflow на русском Asked on August 29, 2021
private void Form1_Load(object sender, EventArgs e)
Для каких целей в параметре object sender, EventArgs
?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace CBS.ADO_NET.TableConstraints
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string connectionString = @"Data Source=.SQLEXPRESS; Initial Catalog=ShopDB; Integrated Security=True;"; // создание строки подключения
DataSet ds = new DataSet();
DataTable customers = new DataTable("Customers");
DataTable orders = new DataTable("Orders");
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand customersCmd = new SqlCommand("SELECT CustomerNo, LName, FName, Address1, Phone FROM Customers", connection);
SqlCommand ordersCmd = new SqlCommand("SELECT OrderID, CustomerNo, OrderDate FROM Orders", connection);
SqlDataReader ordersReader = ordersCmd.ExecuteReader(); // получение DataReader для таблицы OrderDetails
// метод LoadWithSchema позволяет на основе объекта DataReader создать объект DataTable
//с ограничениями для столбцов как в базе данных и заполнить эту таблицу данными
orders.LoadWithSchema(ordersReader);
ordersReader.Close();
SqlDataReader customersReader = customersCmd.ExecuteReader();
customers.LoadWithSchema(customersReader);
customersReader.Close();
}
// объект DataReader не имеет информации об ограничениях объектов DataTable, таких как
// UniqueConstraint, ForeignKeyConstraint и PrimaryKey, поэтому прийдется их создать вручную
customers.PrimaryKey = new DataColumn[] { customers.Columns[0] };
ds.Tables.AddRange(new DataTable[] { customers, orders });
// создание ограничения ForeignKeyConstraint для таблицы OrderDetails
var FK_CustomersOrders = new ForeignKeyConstraint(customers.Columns["CustomerNo"], orders.Columns["CustomerNo"]);
orders.Constraints.Add(FK_CustomersOrders);
parentGridView.DataSource = customers; // связывание элемента управления parentGridView с таблицей Products
childDataGridView.DataSource = orders; // Связывание элемента управления childDataGridView c таблицей OrderDetails
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CBS.ADO_NET.TableConstraints
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;
namespace CBS.ADO_NET.TableConstraints
{
static class TbaleExtensoinClass
{
// этот метод записывает данные в таблицу на основе DataReader
public static void LoadWithSchema(this DataTable table, SqlDataReader reader)
{
table.CreateSchemaFromReader(reader);
table.Load(reader); // Метод Load используется для загрузки в таблицу DataTable строк из источника данных.
}
// этот метод создает ограничения на столбцы таблице на основе полученного объекта DataReader
private static void CreateSchemaFromReader(this DataTable table, SqlDataReader reader)
{
DataTable schemaTable = reader.GetSchemaTable(); // Метод Возвращает таблицу описывающую метаданные столбца объекта SqlDataReader.
foreach (DataRow schemaRow in schemaTable.Rows)
{
DataColumn column = new DataColumn((string)schemaRow["ColumnName"]); // создание столбца с именем столбца в источнике данных
column.AllowDBNull = (bool)schemaRow["AllowDbNull"]; // получение значения свойства AllowDBNull
column.DataType = (Type)schemaRow["DataType"]; // получение значения свойства DataType
column.Unique = (bool)schemaRow["IsUnique"]; // получение значения свойства Unique
column.ReadOnly = (bool)schemaRow["IsReadOnly"]; // получение значения свойства Readonly
column.AutoIncrement = (bool)schemaRow["IsIdentity"]; // получение значения свойства AutoIncrement
if (column.DataType == typeof(string)) // если поле типа string
column.MaxLength = (int)schemaRow["ColumnSize"]; // получить значение свойства MaxLength
if (column.AutoIncrement == true) // Если поле с автоинкрементом
{ column.AutoIncrementStep = -1; column.AutoIncrementSeed = 0; } // задать свойства AutoIncrementStep и AutoIncrementSeed
table.Columns.Add(column); // добавить созданный столбец в коллекцию Columns таблицы
}
}
}
}
Это так называемый Event Handlers
Form1_Load(object sender, EventArgs e)
sender
- так называемый контекст вызова, или объект который вызвал данное событие.
e
- используются для передачи парамеров вызова метода.
EventArgs - базовый класс для классов с данными о событиях.
также можно посмотреть тут
Correct answer by Aziz Umarov on August 29, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP