Добавьте файлы проекта.

This commit is contained in:
student 2025-04-16 13:28:21 +07:00
parent f2e6039749
commit 02770a4691
18 changed files with 2429 additions and 0 deletions

22
App.config Normal file
View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<entityFramework>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite.EF6" />
<add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
<remove invariant="System.Data.SQLite" /><add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /></DbProviderFactories>
</system.data>
</configuration>

333
DbManager.cs Normal file
View File

@ -0,0 +1,333 @@
using System;
using System.Collections.Generic;
using System.Data.SQLite;
using System.IO;
using System.Linq;
using System.Text;
namespace Учетещей
{
public static class DbManager
{
private const string DbFileName = "inventory.db";
private static readonly string ConnectionString = $"Data Source={DbFileName};Version=3;";
// Инициализация базы данных
public static void InitializeDatabase()
{
// Проверяем существование файла базы данных
bool isNewDatabase = !File.Exists(DbFileName);
if (isNewDatabase)
{
// Создаем базу данных и необходимые таблицы
SQLiteConnection.CreateFile(DbFileName);
using (var connection = new SQLiteConnection(ConnectionString))
{
connection.Open();
// Создаем таблицы
string createUsersTable = @"
CREATE TABLE Users (
Username TEXT PRIMARY KEY,
Password TEXT NOT NULL,
Role INTEGER NOT NULL
)";
string createDevicesTable = @"
CREATE TABLE Devices (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
Name TEXT NOT NULL,
InventoryNumber TEXT NOT NULL,
Type INTEGER NOT NULL,
Location TEXT,
ResponsiblePerson TEXT,
State INTEGER NOT NULL,
RegistrationDate TEXT NOT NULL
)";
using (var command = new SQLiteCommand(createUsersTable, connection))
{
command.ExecuteNonQuery();
}
using (var command = new SQLiteCommand(createDevicesTable, connection))
{
command.ExecuteNonQuery();
}
// Добавляем предустановленных пользователей
string insertDefaultUsers = @"
INSERT INTO Users (Username, Password, Role) VALUES
('admin', 'admin', 1),
('user', 'user', 0)";
using (var command = new SQLiteCommand(insertDefaultUsers, connection))
{
command.ExecuteNonQuery();
}
}
}
}
#region Пользователи
// Авторизация пользователя
public static User Authenticate(string username, string password)
{
using (var connection = new SQLiteConnection(ConnectionString))
{
connection.Open();
string query = "SELECT Username, Password, Role FROM Users WHERE Username = @Username AND Password = @Password";
using (var command = new SQLiteCommand(query, connection))
{
command.Parameters.AddWithValue("@Username", username);
command.Parameters.AddWithValue("@Password", password);
using (var reader = command.ExecuteReader())
{
if (reader.Read())
{
return new User
{
Username = reader["Username"].ToString(),
Password = reader["Password"].ToString(),
Role = (UserRole)Convert.ToInt32(reader["Role"])
};
}
}
}
}
return null;
}
#endregion
#region Устройства
// Получение всех устройств
public static List<Device> GetAllDevices()
{
List<Device> devices = new List<Device>();
using (var connection = new SQLiteConnection(ConnectionString))
{
connection.Open();
string query = "SELECT * FROM Devices";
using (var command = new SQLiteCommand(query, connection))
{
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
devices.Add(ReadDeviceFromDb(reader));
}
}
}
}
return devices;
}
// Добавление нового устройства
public static void AddDevice(Device device)
{
using (var connection = new SQLiteConnection(ConnectionString))
{
connection.Open();
string query = @"
INSERT INTO Devices (Name, InventoryNumber, Type, Location, ResponsiblePerson, State, RegistrationDate)
VALUES (@Name, @InventoryNumber, @Type, @Location, @ResponsiblePerson, @State, @RegistrationDate);
SELECT last_insert_rowid();";
using (var command = new SQLiteCommand(query, connection))
{
SetDeviceParameters(command, device);
device.Id = Convert.ToInt32(command.ExecuteScalar());
}
}
}
// Обновление существующего устройства
public static void UpdateDevice(Device device)
{
using (var connection = new SQLiteConnection(ConnectionString))
{
connection.Open();
string query = @"
UPDATE Devices
SET Name = @Name,
InventoryNumber = @InventoryNumber,
Type = @Type,
Location = @Location,
ResponsiblePerson = @ResponsiblePerson,
State = @State,
RegistrationDate = @RegistrationDate
WHERE Id = @Id";
using (var command = new SQLiteCommand(query, connection))
{
command.Parameters.AddWithValue("@Id", device.Id);
SetDeviceParameters(command, device);
command.ExecuteNonQuery();
}
}
}
// Удаление устройства
public static void DeleteDevice(int id)
{
using (var connection = new SQLiteConnection(ConnectionString))
{
connection.Open();
string query = "DELETE FROM Devices WHERE Id = @Id";
using (var command = new SQLiteCommand(query, connection))
{
command.Parameters.AddWithValue("@Id", id);
command.ExecuteNonQuery();
}
}
}
// Фильтрация устройств
public static List<Device> FilterDevices(DeviceType? type = null, DeviceState? state = null,
string location = null, string searchText = null)
{
List<Device> devices = new List<Device>();
StringBuilder queryBuilder = new StringBuilder("SELECT * FROM Devices WHERE 1=1");
Dictionary<string, object> parameters = new Dictionary<string, object>();
if (type.HasValue)
{
queryBuilder.Append(" AND Type = @Type");
parameters.Add("@Type", (int)type.Value);
}
if (state.HasValue)
{
queryBuilder.Append(" AND State = @State");
parameters.Add("@State", (int)state.Value);
}
if (!string.IsNullOrEmpty(location))
{
queryBuilder.Append(" AND Location LIKE @Location");
parameters.Add("@Location", "%" + location + "%");
}
if (!string.IsNullOrEmpty(searchText))
{
queryBuilder.Append(" AND (Name LIKE @SearchText OR InventoryNumber LIKE @SearchText)");
parameters.Add("@SearchText", "%" + searchText.ToLower() + "%");
}
using (var connection = new SQLiteConnection(ConnectionString))
{
connection.Open();
using (var command = new SQLiteCommand(queryBuilder.ToString(), connection))
{
foreach (var param in parameters)
{
command.Parameters.AddWithValue(param.Key, param.Value);
}
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
devices.Add(ReadDeviceFromDb(reader));
}
}
}
}
return devices;
}
// Статистика по типам устройств
public static Dictionary<DeviceType, int> GetDeviceTypeStats()
{
var result = new Dictionary<DeviceType, int>();
using (var connection = new SQLiteConnection(ConnectionString))
{
connection.Open();
string query = "SELECT Type, COUNT(*) as Count FROM Devices GROUP BY Type";
using (var command = new SQLiteCommand(query, connection))
{
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
DeviceType type = (DeviceType)Convert.ToInt32(reader["Type"]);
int count = Convert.ToInt32(reader["Count"]);
result[type] = count;
}
}
}
}
return result;
}
// Экспорт данных в CSV
public static void ExportToCsv(string filePath)
{
var devices = GetAllDevices();
var lines = new List<string>
{
"ID;Наименование;Инвентарный номер;Тип;Местоположение;Ответственное лицо;Состояние;Дата постановки на учёт"
};
foreach (var device in devices)
{
lines.Add($"{device.Id};{device.Name};{device.InventoryNumber};{device.TypeString};" +
$"{device.Location};{device.ResponsiblePerson};{device.StateString};{device.RegistrationDate:dd.MM.yyyy}");
}
File.WriteAllLines(filePath, lines, Encoding.UTF8);
}
#endregion
#region Вспомогательные методы
// Чтение устройства из базы данных
private static Device ReadDeviceFromDb(SQLiteDataReader reader)
{
return new Device
{
Id = Convert.ToInt32(reader["Id"]),
Name = reader["Name"].ToString(),
InventoryNumber = reader["InventoryNumber"].ToString(),
Type = (DeviceType)Convert.ToInt32(reader["Type"]),
Location = reader["Location"].ToString(),
ResponsiblePerson = reader["ResponsiblePerson"].ToString(),
State = (DeviceState)Convert.ToInt32(reader["State"]),
RegistrationDate = Convert.ToDateTime(reader["RegistrationDate"])
};
}
// Установка параметров устройства для команды SQLite
private static void SetDeviceParameters(SQLiteCommand command, Device device)
{
command.Parameters.AddWithValue("@Name", device.Name);
command.Parameters.AddWithValue("@InventoryNumber", device.InventoryNumber);
command.Parameters.AddWithValue("@Type", (int)device.Type);
command.Parameters.AddWithValue("@Location", device.Location ?? string.Empty);
command.Parameters.AddWithValue("@ResponsiblePerson", device.ResponsiblePerson ?? string.Empty);
command.Parameters.AddWithValue("@State", (int)device.State);
command.Parameters.AddWithValue("@RegistrationDate", device.RegistrationDate.ToString("yyyy-MM-dd HH:mm:ss"));
}
#endregion
}
}

816
Form1.Designer.cs generated Normal file
View File

@ -0,0 +1,816 @@
using MetroFramework.Controls;
using MetroFramework.Forms;
namespace Учетещей
{
partial class Form1
{
private System.ComponentModel.IContainer components = null;
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
private void InitializeComponent()
{
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle19 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle20 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle21 = new System.Windows.Forms.DataGridViewCellStyle();
this.dgvDevices = new MetroFramework.Controls.MetroGrid();
this.panelControls = new System.Windows.Forms.Panel();
this.btnExport = new MetroFramework.Controls.MetroButton();
this.btnResetFilter = new MetroFramework.Controls.MetroButton();
this.btnFilter = new MetroFramework.Controls.MetroButton();
this.txtSearch = new MetroFramework.Controls.MetroTextBox();
this.label10 = new MetroFramework.Controls.MetroLabel();
this.txtFilterLocation = new MetroFramework.Controls.MetroTextBox();
this.label9 = new MetroFramework.Controls.MetroLabel();
this.cmbFilterState = new MetroFramework.Controls.MetroComboBox();
this.label8 = new MetroFramework.Controls.MetroLabel();
this.cmbFilterType = new MetroFramework.Controls.MetroComboBox();
this.label7 = new MetroFramework.Controls.MetroLabel();
this.panelDeviceDetails = new System.Windows.Forms.Panel();
this.dtpRegistrationDate = new MetroFramework.Controls.MetroDateTime();
this.label6 = new MetroFramework.Controls.MetroLabel();
this.cmbDeviceState = new MetroFramework.Controls.MetroComboBox();
this.label5 = new MetroFramework.Controls.MetroLabel();
this.txtResponsiblePerson = new MetroFramework.Controls.MetroTextBox();
this.label4 = new MetroFramework.Controls.MetroLabel();
this.txtLocation = new MetroFramework.Controls.MetroTextBox();
this.label3 = new MetroFramework.Controls.MetroLabel();
this.cmbDeviceType = new MetroFramework.Controls.MetroComboBox();
this.label2 = new MetroFramework.Controls.MetroLabel();
this.txtInventoryNumber = new MetroFramework.Controls.MetroTextBox();
this.label1 = new MetroFramework.Controls.MetroLabel();
this.txtDeviceName = new MetroFramework.Controls.MetroTextBox();
this.lblDeviceName = new MetroFramework.Controls.MetroLabel();
this.btnSave = new MetroFramework.Controls.MetroButton();
this.btnDelete = new MetroFramework.Controls.MetroButton();
this.btnEdit = new MetroFramework.Controls.MetroButton();
this.btnAdd = new MetroFramework.Controls.MetroButton();
this.tabControl1 = new MetroFramework.Controls.MetroTabControl();
this.tabPageDevices = new MetroFramework.Controls.MetroTabPage();
this.tabPageStatistics = new MetroFramework.Controls.MetroTabPage();
this.lvStatistics = new System.Windows.Forms.ListView();
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
((System.ComponentModel.ISupportInitialize)(this.dgvDevices)).BeginInit();
this.panelControls.SuspendLayout();
this.panelDeviceDetails.SuspendLayout();
this.tabControl1.SuspendLayout();
this.tabPageDevices.SuspendLayout();
this.tabPageStatistics.SuspendLayout();
this.SuspendLayout();
//
// dgvDevices
//
this.dgvDevices.AllowUserToAddRows = false;
this.dgvDevices.AllowUserToDeleteRows = false;
this.dgvDevices.AllowUserToResizeRows = false;
this.dgvDevices.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.dgvDevices.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
this.dgvDevices.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
this.dgvDevices.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.dgvDevices.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None;
this.dgvDevices.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None;
dataGridViewCellStyle19.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
dataGridViewCellStyle19.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(174)))), ((int)(((byte)(219)))));
dataGridViewCellStyle19.Font = new System.Drawing.Font("Segoe UI", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
dataGridViewCellStyle19.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
dataGridViewCellStyle19.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(198)))), ((int)(((byte)(247)))));
dataGridViewCellStyle19.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(17)))), ((int)(((byte)(17)))), ((int)(((byte)(17)))));
dataGridViewCellStyle19.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
this.dgvDevices.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle19;
this.dgvDevices.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridViewCellStyle20.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
dataGridViewCellStyle20.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
dataGridViewCellStyle20.Font = new System.Drawing.Font("Segoe UI", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
dataGridViewCellStyle20.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(136)))), ((int)(((byte)(136)))));
dataGridViewCellStyle20.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(198)))), ((int)(((byte)(247)))));
dataGridViewCellStyle20.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(17)))), ((int)(((byte)(17)))), ((int)(((byte)(17)))));
dataGridViewCellStyle20.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
this.dgvDevices.DefaultCellStyle = dataGridViewCellStyle20;
this.dgvDevices.EnableHeadersVisualStyles = false;
this.dgvDevices.Font = new System.Drawing.Font("Segoe UI", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
this.dgvDevices.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
this.dgvDevices.Location = new System.Drawing.Point(10, 62);
this.dgvDevices.Margin = new System.Windows.Forms.Padding(10);
this.dgvDevices.MultiSelect = false;
this.dgvDevices.Name = "dgvDevices";
this.dgvDevices.ReadOnly = true;
this.dgvDevices.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None;
dataGridViewCellStyle21.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
dataGridViewCellStyle21.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(174)))), ((int)(((byte)(219)))));
dataGridViewCellStyle21.Font = new System.Drawing.Font("Segoe UI", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
dataGridViewCellStyle21.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
dataGridViewCellStyle21.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(198)))), ((int)(((byte)(247)))));
dataGridViewCellStyle21.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(17)))), ((int)(((byte)(17)))), ((int)(((byte)(17)))));
dataGridViewCellStyle21.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
this.dgvDevices.RowHeadersDefaultCellStyle = dataGridViewCellStyle21;
this.dgvDevices.RowHeadersVisible = false;
this.dgvDevices.RowHeadersWidth = 51;
this.dgvDevices.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing;
this.dgvDevices.RowTemplate.Height = 24;
this.dgvDevices.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.dgvDevices.Size = new System.Drawing.Size(916, 225);
this.dgvDevices.TabIndex = 0;
//
// panelControls
//
this.panelControls.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.panelControls.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(255)))));
this.panelControls.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panelControls.Controls.Add(this.btnExport);
this.panelControls.Controls.Add(this.btnResetFilter);
this.panelControls.Controls.Add(this.btnFilter);
this.panelControls.Controls.Add(this.txtSearch);
this.panelControls.Controls.Add(this.label10);
this.panelControls.Controls.Add(this.txtFilterLocation);
this.panelControls.Controls.Add(this.label9);
this.panelControls.Controls.Add(this.cmbFilterState);
this.panelControls.Controls.Add(this.label8);
this.panelControls.Controls.Add(this.cmbFilterType);
this.panelControls.Controls.Add(this.label7);
this.panelControls.Location = new System.Drawing.Point(10, 10);
this.panelControls.Margin = new System.Windows.Forms.Padding(10);
this.panelControls.Name = "panelControls";
this.panelControls.Size = new System.Drawing.Size(916, 42);
this.panelControls.TabIndex = 1;
//
// btnExport
//
this.btnExport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnExport.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(177)))), ((int)(((byte)(89)))));
this.btnExport.ForeColor = System.Drawing.Color.White;
this.btnExport.Highlight = true;
this.btnExport.Location = new System.Drawing.Point(838, 9);
this.btnExport.Margin = new System.Windows.Forms.Padding(2);
this.btnExport.Name = "btnExport";
this.btnExport.Size = new System.Drawing.Size(70, 23);
this.btnExport.TabIndex = 10;
this.btnExport.Text = "Экспорт";
this.btnExport.UseCustomBackColor = true;
this.btnExport.UseCustomForeColor = true;
this.btnExport.UseSelectable = true;
this.btnExport.Click += new System.EventHandler(this.btnExport_Click);
//
// btnResetFilter
//
this.btnResetFilter.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnResetFilter.BackColor = System.Drawing.Color.Silver;
this.btnResetFilter.ForeColor = System.Drawing.Color.White;
this.btnResetFilter.Location = new System.Drawing.Point(763, 9);
this.btnResetFilter.Margin = new System.Windows.Forms.Padding(2);
this.btnResetFilter.Name = "btnResetFilter";
this.btnResetFilter.Size = new System.Drawing.Size(71, 23);
this.btnResetFilter.TabIndex = 9;
this.btnResetFilter.Text = "Сбросить";
this.btnResetFilter.UseCustomBackColor = true;
this.btnResetFilter.UseCustomForeColor = true;
this.btnResetFilter.UseSelectable = true;
this.btnResetFilter.Click += new System.EventHandler(this.btnResetFilter_Click);
//
// btnFilter
//
this.btnFilter.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnFilter.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(174)))), ((int)(((byte)(219)))));
this.btnFilter.ForeColor = System.Drawing.Color.White;
this.btnFilter.Highlight = true;
this.btnFilter.Location = new System.Drawing.Point(711, 9);
this.btnFilter.Margin = new System.Windows.Forms.Padding(2);
this.btnFilter.Name = "btnFilter";
this.btnFilter.Size = new System.Drawing.Size(48, 23);
this.btnFilter.TabIndex = 8;
this.btnFilter.Text = "Поиск";
this.btnFilter.UseCustomBackColor = true;
this.btnFilter.UseCustomForeColor = true;
this.btnFilter.UseSelectable = true;
this.btnFilter.Click += new System.EventHandler(this.btnFilter_Click);
//
// txtSearch
//
this.txtSearch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
//
//
//
this.txtSearch.CustomButton.Image = null;
this.txtSearch.CustomButton.Location = new System.Drawing.Point(74, 1);
this.txtSearch.CustomButton.Name = "";
this.txtSearch.CustomButton.Size = new System.Drawing.Size(21, 21);
this.txtSearch.CustomButton.Style = MetroFramework.MetroColorStyle.Blue;
this.txtSearch.CustomButton.TabIndex = 1;
this.txtSearch.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light;
this.txtSearch.CustomButton.UseSelectable = true;
this.txtSearch.CustomButton.Visible = false;
this.txtSearch.Lines = new string[0];
this.txtSearch.Location = new System.Drawing.Point(601, 9);
this.txtSearch.Margin = new System.Windows.Forms.Padding(2);
this.txtSearch.MaxLength = 32767;
this.txtSearch.Name = "txtSearch";
this.txtSearch.PasswordChar = '\0';
this.txtSearch.PromptText = "Поиск...";
this.txtSearch.ScrollBars = System.Windows.Forms.ScrollBars.None;
this.txtSearch.SelectedText = "";
this.txtSearch.SelectionLength = 0;
this.txtSearch.SelectionStart = 0;
this.txtSearch.ShortcutsEnabled = true;
this.txtSearch.Size = new System.Drawing.Size(104, 23);
this.txtSearch.TabIndex = 7;
this.txtSearch.UseSelectable = true;
this.txtSearch.WaterMark = "Поиск...";
this.txtSearch.WaterMarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(109)))));
this.txtSearch.WaterMarkFont = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Pixel);
//
// label10
//
this.label10.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.label10.AutoSize = true;
this.label10.Location = new System.Drawing.Point(560, 10);
this.label10.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size(43, 19);
this.label10.TabIndex = 6;
this.label10.Text = "Текст:";
//
// txtFilterLocation
//
//
//
//
this.txtFilterLocation.CustomButton.Image = null;
this.txtFilterLocation.CustomButton.Location = new System.Drawing.Point(54, 1);
this.txtFilterLocation.CustomButton.Name = "";
this.txtFilterLocation.CustomButton.Size = new System.Drawing.Size(21, 21);
this.txtFilterLocation.CustomButton.Style = MetroFramework.MetroColorStyle.Blue;
this.txtFilterLocation.CustomButton.TabIndex = 1;
this.txtFilterLocation.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light;
this.txtFilterLocation.CustomButton.UseSelectable = true;
this.txtFilterLocation.CustomButton.Visible = false;
this.txtFilterLocation.Lines = new string[0];
this.txtFilterLocation.Location = new System.Drawing.Point(439, 9);
this.txtFilterLocation.Margin = new System.Windows.Forms.Padding(2);
this.txtFilterLocation.MaxLength = 32767;
this.txtFilterLocation.Name = "txtFilterLocation";
this.txtFilterLocation.PasswordChar = '\0';
this.txtFilterLocation.PromptText = "Кабинет...";
this.txtFilterLocation.ScrollBars = System.Windows.Forms.ScrollBars.None;
this.txtFilterLocation.SelectedText = "";
this.txtFilterLocation.SelectionLength = 0;
this.txtFilterLocation.SelectionStart = 0;
this.txtFilterLocation.ShortcutsEnabled = true;
this.txtFilterLocation.Size = new System.Drawing.Size(104, 23);
this.txtFilterLocation.TabIndex = 5;
this.txtFilterLocation.UseSelectable = true;
this.txtFilterLocation.WaterMark = "Кабинет...";
this.txtFilterLocation.WaterMarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(109)))));
this.txtFilterLocation.WaterMarkFont = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Pixel);
//
// label9
//
this.label9.AutoSize = true;
this.label9.Location = new System.Drawing.Point(378, 10);
this.label9.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(62, 19);
this.label9.TabIndex = 4;
this.label9.Text = "Кабинет:";
//
// cmbFilterState
//
this.cmbFilterState.FormattingEnabled = true;
this.cmbFilterState.ItemHeight = 23;
this.cmbFilterState.Location = new System.Drawing.Point(242, 6);
this.cmbFilterState.Margin = new System.Windows.Forms.Padding(2);
this.cmbFilterState.Name = "cmbFilterState";
this.cmbFilterState.PromptText = "Состояние";
this.cmbFilterState.Size = new System.Drawing.Size(120, 29);
this.cmbFilterState.TabIndex = 3;
this.cmbFilterState.UseSelectable = true;
//
// label8
//
this.label8.AutoSize = true;
this.label8.Location = new System.Drawing.Point(164, 10);
this.label8.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(78, 19);
this.label8.TabIndex = 2;
this.label8.Text = "Состояние:";
//
// cmbFilterType
//
this.cmbFilterType.FormattingEnabled = true;
this.cmbFilterType.ItemHeight = 23;
this.cmbFilterType.Location = new System.Drawing.Point(43, 6);
this.cmbFilterType.Margin = new System.Windows.Forms.Padding(2);
this.cmbFilterType.Name = "cmbFilterType";
this.cmbFilterType.PromptText = "Тип";
this.cmbFilterType.Size = new System.Drawing.Size(104, 29);
this.cmbFilterType.TabIndex = 1;
this.cmbFilterType.UseSelectable = true;
//
// label7
//
this.label7.AutoSize = true;
this.label7.Location = new System.Drawing.Point(8, 10);
this.label7.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(35, 19);
this.label7.TabIndex = 0;
this.label7.Text = "Тип:";
//
// panelDeviceDetails
//
this.panelDeviceDetails.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.panelDeviceDetails.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(255)))));
this.panelDeviceDetails.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panelDeviceDetails.Controls.Add(this.dtpRegistrationDate);
this.panelDeviceDetails.Controls.Add(this.label6);
this.panelDeviceDetails.Controls.Add(this.cmbDeviceState);
this.panelDeviceDetails.Controls.Add(this.label5);
this.panelDeviceDetails.Controls.Add(this.txtResponsiblePerson);
this.panelDeviceDetails.Controls.Add(this.label4);
this.panelDeviceDetails.Controls.Add(this.txtLocation);
this.panelDeviceDetails.Controls.Add(this.label3);
this.panelDeviceDetails.Controls.Add(this.cmbDeviceType);
this.panelDeviceDetails.Controls.Add(this.label2);
this.panelDeviceDetails.Controls.Add(this.txtInventoryNumber);
this.panelDeviceDetails.Controls.Add(this.label1);
this.panelDeviceDetails.Controls.Add(this.txtDeviceName);
this.panelDeviceDetails.Controls.Add(this.lblDeviceName);
this.panelDeviceDetails.Controls.Add(this.btnSave);
this.panelDeviceDetails.Controls.Add(this.btnDelete);
this.panelDeviceDetails.Controls.Add(this.btnEdit);
this.panelDeviceDetails.Controls.Add(this.btnAdd);
this.panelDeviceDetails.Location = new System.Drawing.Point(10, 306);
this.panelDeviceDetails.Margin = new System.Windows.Forms.Padding(20);
this.panelDeviceDetails.Name = "panelDeviceDetails";
this.panelDeviceDetails.Size = new System.Drawing.Size(916, 96);
this.panelDeviceDetails.TabIndex = 2;
//
// dtpRegistrationDate
//
this.dtpRegistrationDate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.dtpRegistrationDate.Format = System.Windows.Forms.DateTimePickerFormat.Short;
this.dtpRegistrationDate.Location = new System.Drawing.Point(806, 45);
this.dtpRegistrationDate.Margin = new System.Windows.Forms.Padding(2);
this.dtpRegistrationDate.MinimumSize = new System.Drawing.Size(0, 29);
this.dtpRegistrationDate.Name = "dtpRegistrationDate";
this.dtpRegistrationDate.Size = new System.Drawing.Size(102, 29);
this.dtpRegistrationDate.TabIndex = 17;
//
// label6
//
this.label6.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(765, 50);
this.label6.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(40, 19);
this.label6.TabIndex = 16;
this.label6.Text = "Дата:";
//
// cmbDeviceState
//
this.cmbDeviceState.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.cmbDeviceState.FormattingEnabled = true;
this.cmbDeviceState.ItemHeight = 23;
this.cmbDeviceState.Location = new System.Drawing.Point(806, 8);
this.cmbDeviceState.Margin = new System.Windows.Forms.Padding(2);
this.cmbDeviceState.Name = "cmbDeviceState";
this.cmbDeviceState.PromptText = "Состояние";
this.cmbDeviceState.Size = new System.Drawing.Size(102, 29);
this.cmbDeviceState.TabIndex = 15;
this.cmbDeviceState.UseSelectable = true;
//
// label5
//
this.label5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(728, 12);
this.label5.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(78, 19);
this.label5.TabIndex = 14;
this.label5.Text = "Состояние:";
//
// txtResponsiblePerson
//
this.txtResponsiblePerson.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
//
//
//
this.txtResponsiblePerson.CustomButton.Image = null;
this.txtResponsiblePerson.CustomButton.Location = new System.Drawing.Point(273, 1);
this.txtResponsiblePerson.CustomButton.Name = "";
this.txtResponsiblePerson.CustomButton.Size = new System.Drawing.Size(21, 21);
this.txtResponsiblePerson.CustomButton.Style = MetroFramework.MetroColorStyle.Blue;
this.txtResponsiblePerson.CustomButton.TabIndex = 1;
this.txtResponsiblePerson.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light;
this.txtResponsiblePerson.CustomButton.UseSelectable = true;
this.txtResponsiblePerson.CustomButton.Visible = false;
this.txtResponsiblePerson.Lines = new string[0];
this.txtResponsiblePerson.Location = new System.Drawing.Point(509, 48);
this.txtResponsiblePerson.Margin = new System.Windows.Forms.Padding(2);
this.txtResponsiblePerson.MaxLength = 32767;
this.txtResponsiblePerson.Name = "txtResponsiblePerson";
this.txtResponsiblePerson.PasswordChar = '\0';
this.txtResponsiblePerson.PromptText = "Отв. лицо";
this.txtResponsiblePerson.ScrollBars = System.Windows.Forms.ScrollBars.None;
this.txtResponsiblePerson.SelectedText = "";
this.txtResponsiblePerson.SelectionLength = 0;
this.txtResponsiblePerson.SelectionStart = 0;
this.txtResponsiblePerson.ShortcutsEnabled = true;
this.txtResponsiblePerson.Size = new System.Drawing.Size(212, 23);
this.txtResponsiblePerson.TabIndex = 13;
this.txtResponsiblePerson.UseSelectable = true;
this.txtResponsiblePerson.WaterMark = "Отв. лицо";
this.txtResponsiblePerson.WaterMarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(109)))));
this.txtResponsiblePerson.WaterMarkFont = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Pixel);
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(429, 50);
this.label4.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(73, 19);
this.label4.TabIndex = 12;
this.label4.Text = "Отв. лицо:";
//
// txtLocation
//
this.txtLocation.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
//
//
//
this.txtLocation.CustomButton.Image = null;
this.txtLocation.CustomButton.Location = new System.Drawing.Point(273, 1);
this.txtLocation.CustomButton.Name = "";
this.txtLocation.CustomButton.Size = new System.Drawing.Size(21, 21);
this.txtLocation.CustomButton.Style = MetroFramework.MetroColorStyle.Blue;
this.txtLocation.CustomButton.TabIndex = 1;
this.txtLocation.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light;
this.txtLocation.CustomButton.UseSelectable = true;
this.txtLocation.CustomButton.Visible = false;
this.txtLocation.Lines = new string[0];
this.txtLocation.Location = new System.Drawing.Point(509, 12);
this.txtLocation.Margin = new System.Windows.Forms.Padding(2);
this.txtLocation.MaxLength = 32767;
this.txtLocation.Name = "txtLocation";
this.txtLocation.PasswordChar = '\0';
this.txtLocation.PromptText = "Кабинет";
this.txtLocation.ScrollBars = System.Windows.Forms.ScrollBars.None;
this.txtLocation.SelectedText = "";
this.txtLocation.SelectionLength = 0;
this.txtLocation.SelectionStart = 0;
this.txtLocation.ShortcutsEnabled = true;
this.txtLocation.Size = new System.Drawing.Size(212, 23);
this.txtLocation.TabIndex = 11;
this.txtLocation.UseSelectable = true;
this.txtLocation.WaterMark = "Кабинет";
this.txtLocation.WaterMarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(109)))));
this.txtLocation.WaterMarkFont = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Pixel);
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(439, 12);
this.label3.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(62, 19);
this.label3.TabIndex = 10;
this.label3.Text = "Кабинет:";
//
// cmbDeviceType
//
this.cmbDeviceType.FormattingEnabled = true;
this.cmbDeviceType.ItemHeight = 23;
this.cmbDeviceType.Location = new System.Drawing.Point(336, 8);
this.cmbDeviceType.Margin = new System.Windows.Forms.Padding(2);
this.cmbDeviceType.Name = "cmbDeviceType";
this.cmbDeviceType.PromptText = "Тип";
this.cmbDeviceType.Size = new System.Drawing.Size(76, 29);
this.cmbDeviceType.TabIndex = 9;
this.cmbDeviceType.UseSelectable = true;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(294, 12);
this.label2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(35, 19);
this.label2.TabIndex = 8;
this.label2.Text = "Тип:";
//
// txtInventoryNumber
//
//
//
//
this.txtInventoryNumber.CustomButton.Image = null;
this.txtInventoryNumber.CustomButton.Location = new System.Drawing.Point(54, 1);
this.txtInventoryNumber.CustomButton.Name = "";
this.txtInventoryNumber.CustomButton.Size = new System.Drawing.Size(21, 21);
this.txtInventoryNumber.CustomButton.Style = MetroFramework.MetroColorStyle.Blue;
this.txtInventoryNumber.CustomButton.TabIndex = 1;
this.txtInventoryNumber.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light;
this.txtInventoryNumber.CustomButton.UseSelectable = true;
this.txtInventoryNumber.CustomButton.Visible = false;
this.txtInventoryNumber.Lines = new string[0];
this.txtInventoryNumber.Location = new System.Drawing.Point(336, 48);
this.txtInventoryNumber.Margin = new System.Windows.Forms.Padding(2);
this.txtInventoryNumber.MaxLength = 32767;
this.txtInventoryNumber.Name = "txtInventoryNumber";
this.txtInventoryNumber.PasswordChar = '\0';
this.txtInventoryNumber.PromptText = "Инв. №";
this.txtInventoryNumber.ScrollBars = System.Windows.Forms.ScrollBars.None;
this.txtInventoryNumber.SelectedText = "";
this.txtInventoryNumber.SelectionLength = 0;
this.txtInventoryNumber.SelectionStart = 0;
this.txtInventoryNumber.ShortcutsEnabled = true;
this.txtInventoryNumber.Size = new System.Drawing.Size(76, 23);
this.txtInventoryNumber.TabIndex = 7;
this.txtInventoryNumber.UseSelectable = true;
this.txtInventoryNumber.WaterMark = "Инв. №";
this.txtInventoryNumber.WaterMarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(109)))));
this.txtInventoryNumber.WaterMarkFont = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Pixel);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(270, 50);
this.label1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(60, 19);
this.label1.TabIndex = 6;
this.label1.Text = "Инв. №:";
//
// txtDeviceName
//
//
//
//
this.txtDeviceName.CustomButton.Image = null;
this.txtDeviceName.CustomButton.Location = new System.Drawing.Point(86, 1);
this.txtDeviceName.CustomButton.Name = "";
this.txtDeviceName.CustomButton.Size = new System.Drawing.Size(21, 21);
this.txtDeviceName.CustomButton.Style = MetroFramework.MetroColorStyle.Blue;
this.txtDeviceName.CustomButton.TabIndex = 1;
this.txtDeviceName.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light;
this.txtDeviceName.CustomButton.UseSelectable = true;
this.txtDeviceName.CustomButton.Visible = false;
this.txtDeviceName.Lines = new string[0];
this.txtDeviceName.Location = new System.Drawing.Point(168, 12);
this.txtDeviceName.Margin = new System.Windows.Forms.Padding(2);
this.txtDeviceName.MaxLength = 32767;
this.txtDeviceName.Name = "txtDeviceName";
this.txtDeviceName.PasswordChar = '\0';
this.txtDeviceName.PromptText = "Название устройства";
this.txtDeviceName.ScrollBars = System.Windows.Forms.ScrollBars.None;
this.txtDeviceName.SelectedText = "";
this.txtDeviceName.SelectionLength = 0;
this.txtDeviceName.SelectionStart = 0;
this.txtDeviceName.ShortcutsEnabled = true;
this.txtDeviceName.Size = new System.Drawing.Size(108, 23);
this.txtDeviceName.TabIndex = 5;
this.txtDeviceName.UseSelectable = true;
this.txtDeviceName.WaterMark = "Название устройства";
this.txtDeviceName.WaterMarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(109)))));
this.txtDeviceName.WaterMarkFont = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Pixel);
//
// lblDeviceName
//
this.lblDeviceName.AutoSize = true;
this.lblDeviceName.Location = new System.Drawing.Point(96, 12);
this.lblDeviceName.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblDeviceName.Name = "lblDeviceName";
this.lblDeviceName.Size = new System.Drawing.Size(71, 19);
this.lblDeviceName.TabIndex = 4;
this.lblDeviceName.Text = "Название:";
this.lblDeviceName.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// btnSave
//
this.btnSave.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(177)))), ((int)(((byte)(89)))));
this.btnSave.ForeColor = System.Drawing.Color.White;
this.btnSave.Highlight = true;
this.btnSave.Location = new System.Drawing.Point(10, 69);
this.btnSave.Margin = new System.Windows.Forms.Padding(4);
this.btnSave.Name = "btnSave";
this.btnSave.Size = new System.Drawing.Size(82, 17);
this.btnSave.TabIndex = 3;
this.btnSave.Text = "Сохранить";
this.btnSave.UseCustomBackColor = true;
this.btnSave.UseCustomForeColor = true;
this.btnSave.UseSelectable = true;
this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
//
// btnDelete
//
this.btnDelete.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(209)))), ((int)(((byte)(17)))), ((int)(((byte)(65)))));
this.btnDelete.ForeColor = System.Drawing.Color.White;
this.btnDelete.Location = new System.Drawing.Point(10, 49);
this.btnDelete.Margin = new System.Windows.Forms.Padding(4);
this.btnDelete.Name = "btnDelete";
this.btnDelete.Size = new System.Drawing.Size(82, 17);
this.btnDelete.TabIndex = 2;
this.btnDelete.Text = "Удалить";
this.btnDelete.UseCustomBackColor = true;
this.btnDelete.UseCustomForeColor = true;
this.btnDelete.UseSelectable = true;
this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click);
//
// btnEdit
//
this.btnEdit.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(174)))), ((int)(((byte)(219)))));
this.btnEdit.ForeColor = System.Drawing.Color.White;
this.btnEdit.Location = new System.Drawing.Point(10, 30);
this.btnEdit.Margin = new System.Windows.Forms.Padding(4);
this.btnEdit.Name = "btnEdit";
this.btnEdit.Size = new System.Drawing.Size(82, 17);
this.btnEdit.TabIndex = 1;
this.btnEdit.Text = "Изменить";
this.btnEdit.UseCustomBackColor = true;
this.btnEdit.UseCustomForeColor = true;
this.btnEdit.UseSelectable = true;
this.btnEdit.Click += new System.EventHandler(this.btnEdit_Click);
//
// btnAdd
//
this.btnAdd.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(174)))), ((int)(((byte)(219)))));
this.btnAdd.ForeColor = System.Drawing.Color.White;
this.btnAdd.Highlight = true;
this.btnAdd.Location = new System.Drawing.Point(10, 10);
this.btnAdd.Margin = new System.Windows.Forms.Padding(4);
this.btnAdd.Name = "btnAdd";
this.btnAdd.Size = new System.Drawing.Size(82, 17);
this.btnAdd.TabIndex = 0;
this.btnAdd.Text = "Очистить";
this.btnAdd.UseCustomBackColor = true;
this.btnAdd.UseCustomForeColor = true;
this.btnAdd.UseSelectable = true;
this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click);
//
// tabControl1
//
this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tabControl1.Controls.Add(this.tabPageDevices);
this.tabControl1.Controls.Add(this.tabPageStatistics);
this.tabControl1.Location = new System.Drawing.Point(10, 42);
this.tabControl1.Margin = new System.Windows.Forms.Padding(10);
this.tabControl1.Name = "tabControl1";
this.tabControl1.SelectedIndex = 0;
this.tabControl1.Size = new System.Drawing.Size(943, 444);
this.tabControl1.TabIndex = 4;
this.tabControl1.UseSelectable = true;
//
// tabPageDevices
//
this.tabPageDevices.Controls.Add(this.dgvDevices);
this.tabPageDevices.Controls.Add(this.panelControls);
this.tabPageDevices.Controls.Add(this.panelDeviceDetails);
this.tabPageDevices.HorizontalScrollbarBarColor = true;
this.tabPageDevices.HorizontalScrollbarHighlightOnWheel = false;
this.tabPageDevices.HorizontalScrollbarSize = 8;
this.tabPageDevices.Location = new System.Drawing.Point(4, 38);
this.tabPageDevices.Margin = new System.Windows.Forms.Padding(2);
this.tabPageDevices.Name = "tabPageDevices";
this.tabPageDevices.Padding = new System.Windows.Forms.Padding(2);
this.tabPageDevices.Size = new System.Drawing.Size(935, 402);
this.tabPageDevices.TabIndex = 0;
this.tabPageDevices.Text = "Оборудование";
this.tabPageDevices.VerticalScrollbarBarColor = true;
this.tabPageDevices.VerticalScrollbarHighlightOnWheel = false;
this.tabPageDevices.VerticalScrollbarSize = 8;
//
// tabPageStatistics
//
this.tabPageStatistics.Controls.Add(this.lvStatistics);
this.tabPageStatistics.HorizontalScrollbarBarColor = true;
this.tabPageStatistics.HorizontalScrollbarHighlightOnWheel = false;
this.tabPageStatistics.HorizontalScrollbarSize = 8;
this.tabPageStatistics.Location = new System.Drawing.Point(4, 38);
this.tabPageStatistics.Margin = new System.Windows.Forms.Padding(2);
this.tabPageStatistics.Name = "tabPageStatistics";
this.tabPageStatistics.Padding = new System.Windows.Forms.Padding(2);
this.tabPageStatistics.Size = new System.Drawing.Size(935, 402);
this.tabPageStatistics.TabIndex = 1;
this.tabPageStatistics.Text = "Статистика";
this.tabPageStatistics.VerticalScrollbarBarColor = true;
this.tabPageStatistics.VerticalScrollbarHighlightOnWheel = false;
this.tabPageStatistics.VerticalScrollbarSize = 8;
//
// lvStatistics
//
this.lvStatistics.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.lvStatistics.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader1,
this.columnHeader2});
this.lvStatistics.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.lvStatistics.FullRowSelect = true;
this.lvStatistics.GridLines = true;
this.lvStatistics.HideSelection = false;
this.lvStatistics.Location = new System.Drawing.Point(10, 10);
this.lvStatistics.Margin = new System.Windows.Forms.Padding(10);
this.lvStatistics.Name = "lvStatistics";
this.lvStatistics.Size = new System.Drawing.Size(915, 382);
this.lvStatistics.TabIndex = 0;
this.lvStatistics.UseCompatibleStateImageBehavior = false;
this.lvStatistics.View = System.Windows.Forms.View.Details;
//
// columnHeader1
//
this.columnHeader1.Text = "Тип техники";
this.columnHeader1.Width = 200;
//
// columnHeader2
//
this.columnHeader2.Text = "Количество";
this.columnHeader2.Width = 120;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(979, 535);
this.Controls.Add(this.tabControl1);
this.DisplayHeader = false;
this.Margin = new System.Windows.Forms.Padding(2);
this.MinimumSize = new System.Drawing.Size(776, 535);
this.Name = "Form1";
this.Padding = new System.Windows.Forms.Padding(20, 30, 20, 20);
this.Text = "Учёт техники в организации";
this.Load += new System.EventHandler(this.Form1_Load);
((System.ComponentModel.ISupportInitialize)(this.dgvDevices)).EndInit();
this.panelControls.ResumeLayout(false);
this.panelControls.PerformLayout();
this.panelDeviceDetails.ResumeLayout(false);
this.panelDeviceDetails.PerformLayout();
this.tabControl1.ResumeLayout(false);
this.tabPageDevices.ResumeLayout(false);
this.tabPageStatistics.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private MetroFramework.Controls.MetroGrid dgvDevices;
private System.Windows.Forms.Panel panelControls;
private System.Windows.Forms.Panel panelDeviceDetails;
private MetroFramework.Controls.MetroButton btnSave;
private MetroFramework.Controls.MetroButton btnDelete;
private MetroFramework.Controls.MetroButton btnEdit;
private MetroFramework.Controls.MetroButton btnAdd;
private MetroFramework.Controls.MetroLabel lblDeviceName;
private MetroFramework.Controls.MetroTextBox txtDeviceName;
private MetroFramework.Controls.MetroTextBox txtInventoryNumber;
private MetroFramework.Controls.MetroLabel label1;
private MetroFramework.Controls.MetroComboBox cmbDeviceType;
private MetroFramework.Controls.MetroLabel label2;
private MetroFramework.Controls.MetroTextBox txtResponsiblePerson;
private MetroFramework.Controls.MetroLabel label4;
private MetroFramework.Controls.MetroTextBox txtLocation;
private MetroFramework.Controls.MetroLabel label3;
private MetroFramework.Controls.MetroDateTime dtpRegistrationDate;
private MetroFramework.Controls.MetroLabel label6;
private MetroFramework.Controls.MetroComboBox cmbDeviceState;
private MetroFramework.Controls.MetroLabel label5;
private MetroFramework.Controls.MetroComboBox cmbFilterType;
private MetroFramework.Controls.MetroLabel label7;
private MetroFramework.Controls.MetroComboBox cmbFilterState;
private MetroFramework.Controls.MetroLabel label8;
private MetroFramework.Controls.MetroTextBox txtFilterLocation;
private MetroFramework.Controls.MetroLabel label9;
private MetroFramework.Controls.MetroTextBox txtSearch;
private MetroFramework.Controls.MetroLabel label10;
private MetroFramework.Controls.MetroButton btnExport;
private MetroFramework.Controls.MetroButton btnResetFilter;
private MetroFramework.Controls.MetroButton btnFilter;
private MetroFramework.Controls.MetroTabControl tabControl1;
private MetroFramework.Controls.MetroTabPage tabPageDevices;
private MetroFramework.Controls.MetroTabPage tabPageStatistics;
private System.Windows.Forms.ListView lvStatistics;
private System.Windows.Forms.ColumnHeader columnHeader1;
private System.Windows.Forms.ColumnHeader columnHeader2;
}
}

327
Form1.cs Normal file
View File

@ -0,0 +1,327 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using MetroFramework;
using MetroFramework.Forms;
namespace Учетещей
{
public partial class Form1 : MetroForm
{
private User _currentUser;
private Device _selectedDevice;
public Form1()
{
InitializeComponent();
this.Theme = MetroFramework.MetroThemeStyle.Light;
this.Style = MetroFramework.MetroColorStyle.Blue;
this.BorderStyle = MetroFormBorderStyle.FixedSingle;
this.ShadowType = MetroFormShadowType.AeroShadow;
this.Text = "Учет оборудования";
}
private void Form1_Load(object sender, EventArgs e)
{
// Показываем форму логина
using (var loginForm = new LoginForm())
{
if (loginForm.ShowDialog() == DialogResult.OK)
{
_currentUser = loginForm.CurrentUser;
ConfigureFormForUser();
RefreshDevicesGrid();
}
else
{
Close(); // Выход, если пользователь отменил вход
}
}
// Настройка ComboBox для типов устройств и состояний
cmbFilterType.Items.Add("Все типы");
foreach (DeviceType type in Enum.GetValues(typeof(DeviceType)))
{
cmbFilterType.Items.Add(type.ToString());
cmbDeviceType.Items.Add(type.ToString());
}
cmbFilterType.SelectedIndex = 0;
cmbFilterState.Items.Add("Все состояния");
foreach (DeviceState state in Enum.GetValues(typeof(DeviceState)))
{
cmbFilterState.Items.Add(state.ToString());
cmbDeviceState.Items.Add(state.ToString());
}
cmbFilterState.SelectedIndex = 0;
// Текущая дата для нового устройства
dtpRegistrationDate.Value = DateTime.Today;
// Обработчик выбора строки в DataGridView
dgvDevices.SelectionChanged += DgvDevices_SelectionChanged;
}
private void ConfigureFormForUser()
{
Text = $"Учёт техники в организации - {_currentUser.Username} ({_currentUser.Role})";
bool isAdmin = _currentUser.Role == UserRole.Admin;
btnAdd.Enabled = isAdmin;
btnEdit.Enabled = isAdmin;
btnDelete.Enabled = isAdmin;
btnSave.Enabled = isAdmin;
panelDeviceDetails.Enabled = isAdmin;
}
private void RefreshDevicesGrid(List<Device> devices = null)
{
devices = devices ?? DbManager.GetAllDevices();
dgvDevices.DataSource = null;
dgvDevices.DataSource = devices;
// Настройка столбцов
if (dgvDevices.Columns.Count > 0)
{
dgvDevices.Columns["Id"].HeaderText = "ID";
dgvDevices.Columns["Id"].Width = 40;
dgvDevices.Columns["Name"].HeaderText = "Наименование";
dgvDevices.Columns["Name"].Width = 150;
dgvDevices.Columns["InventoryNumber"].HeaderText = "Инв. номер";
dgvDevices.Columns["InventoryNumber"].Width = 80;
dgvDevices.Columns["TypeString"].HeaderText = "Тип";
dgvDevices.Columns["Type"].Visible = false;
dgvDevices.Columns["Location"].HeaderText = "Местоположение";
dgvDevices.Columns["ResponsiblePerson"].HeaderText = "Отв. лицо";
dgvDevices.Columns["StateString"].HeaderText = "Состояние";
dgvDevices.Columns["State"].Visible = false;
dgvDevices.Columns["RegistrationDate"].HeaderText = "Дата регистрации";
dgvDevices.Columns["RegistrationDate"].DefaultCellStyle.Format = "dd.MM.yyyy";
}
// Обновляем статистику
UpdateStatistics();
}
private void UpdateStatistics()
{
Dictionary<DeviceType, int> stats = DbManager.GetDeviceTypeStats();
lvStatistics.Items.Clear();
foreach (var item in stats)
{
ListViewItem lvi = new ListViewItem(item.Key.ToString());
lvi.SubItems.Add(item.Value.ToString());
lvStatistics.Items.Add(lvi);
}
// Общее количество устройств
int totalDevices = stats.Values.Sum();
ListViewItem totalItem = new ListViewItem("ВСЕГО");
totalItem.SubItems.Add(totalDevices.ToString());
totalItem.Font = new Font(lvStatistics.Font, FontStyle.Bold);
lvStatistics.Items.Add(totalItem);
}
private void ClearDeviceForm()
{
txtDeviceName.Text = "";
txtInventoryNumber.Text = "";
txtLocation.Text = "";
txtResponsiblePerson.Text = "";
cmbDeviceType.SelectedIndex = -1;
cmbDeviceState.SelectedIndex = -1;
dtpRegistrationDate.Value = DateTime.Today;
_selectedDevice = null;
}
private void FillDeviceForm(Device device)
{
if (device == null) return;
txtDeviceName.Text = device.Name;
txtInventoryNumber.Text = device.InventoryNumber;
txtLocation.Text = device.Location;
txtResponsiblePerson.Text = device.ResponsiblePerson;
cmbDeviceType.SelectedItem = device.Type.ToString();
cmbDeviceState.SelectedItem = device.State.ToString();
dtpRegistrationDate.Value = device.RegistrationDate;
_selectedDevice = device;
}
private Device GetDeviceFromForm()
{
if (string.IsNullOrEmpty(txtDeviceName.Text) ||
string.IsNullOrEmpty(txtInventoryNumber.Text) ||
cmbDeviceType.SelectedIndex == -1 ||
cmbDeviceState.SelectedIndex == -1)
{
MetroMessageBox.Show(this,
"Пожалуйста, заполните все обязательные поля",
"Ошибка",
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
return null;
}
Device device = new Device
{
Name = txtDeviceName.Text,
InventoryNumber = txtInventoryNumber.Text,
Type = (DeviceType)Enum.Parse(typeof(DeviceType), cmbDeviceType.SelectedItem.ToString()),
Location = txtLocation.Text,
ResponsiblePerson = txtResponsiblePerson.Text,
State = (DeviceState)Enum.Parse(typeof(DeviceState), cmbDeviceState.SelectedItem.ToString()),
RegistrationDate = dtpRegistrationDate.Value
};
if (_selectedDevice != null)
device.Id = _selectedDevice.Id;
return device;
}
private void DgvDevices_SelectionChanged(object sender, EventArgs e)
{
if (dgvDevices.SelectedRows.Count > 0 && dgvDevices.SelectedRows[0].DataBoundItem is Device selectedDevice)
{
FillDeviceForm(selectedDevice);
}
}
private void btnAdd_Click(object sender, EventArgs e)
{
ClearDeviceForm();
}
private void btnEdit_Click(object sender, EventArgs e)
{
if (dgvDevices.SelectedRows.Count == 0)
{
MetroMessageBox.Show(this,
"Выберите устройство для редактирования",
"Информация",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
return;
}
if (dgvDevices.SelectedRows[0].DataBoundItem is Device selectedDevice)
{
FillDeviceForm(selectedDevice);
}
}
private void btnDelete_Click(object sender, EventArgs e)
{
if (dgvDevices.SelectedRows.Count == 0)
{
MetroMessageBox.Show(this,
"Выберите устройство для удаления",
"Информация",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
return;
}
if (dgvDevices.SelectedRows[0].DataBoundItem is Device selectedDevice)
{
if (MetroMessageBox.Show(this,
$"Вы действительно хотите удалить устройство \"{selectedDevice.Name}\"?",
"Подтверждение удаления",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question) == DialogResult.Yes)
{
DbManager.DeleteDevice(selectedDevice.Id);
RefreshDevicesGrid();
ClearDeviceForm();
}
}
}
private void btnSave_Click(object sender, EventArgs e)
{
Device device = GetDeviceFromForm();
if (device == null) return;
if (_selectedDevice == null)
{
// Добавление нового устройства
DbManager.AddDevice(device);
}
else
{
// Обновление существующего устройства
DbManager.UpdateDevice(device);
}
RefreshDevicesGrid();
ClearDeviceForm();
}
private void btnFilter_Click(object sender, EventArgs e)
{
DeviceType? filterType = null;
if (cmbFilterType.SelectedIndex > 0)
{
filterType = (DeviceType)Enum.Parse(typeof(DeviceType), cmbFilterType.SelectedItem.ToString());
}
DeviceState? filterState = null;
if (cmbFilterState.SelectedIndex > 0)
{
filterState = (DeviceState)Enum.Parse(typeof(DeviceState), cmbFilterState.SelectedItem.ToString());
}
string location = txtFilterLocation.Text;
string searchText = txtSearch.Text;
var filteredDevices = DbManager.FilterDevices(filterType, filterState, location, searchText);
RefreshDevicesGrid(filteredDevices);
}
private void btnResetFilter_Click(object sender, EventArgs e)
{
cmbFilterType.SelectedIndex = 0;
cmbFilterState.SelectedIndex = 0;
txtFilterLocation.Text = "";
txtSearch.Text = "";
RefreshDevicesGrid();
}
private void btnExport_Click(object sender, EventArgs e)
{
try
{
SaveFileDialog saveDialog = new SaveFileDialog
{
Filter = "CSV файлы (*.csv)|*.csv|Текстовые файлы (*.txt)|*.txt|Все файлы (*.*)|*.*",
Title = "Экспорт данных",
FileName = "Учет_техники_" + DateTime.Now.ToString("dd_MM_yyyy")
};
if (saveDialog.ShowDialog() == DialogResult.OK)
{
DbManager.ExportToCsv(saveDialog.FileName);
MetroMessageBox.Show(this,
"Данные успешно экспортированы",
"Экспорт",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
catch (Exception ex)
{
MetroMessageBox.Show(this,
"Ошибка при экспорте данных: " + ex.Message,
"Ошибка",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
}
}

120
Form1.resx Normal file
View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

129
LoginForm.Designer.cs generated Normal file
View File

@ -0,0 +1,129 @@
using MetroFramework.Controls;
using MetroFramework.Forms;
namespace Учетещей
{
partial class LoginForm
{
private System.ComponentModel.IContainer components = null;
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
private void InitializeComponent()
{
this.label1 = new MetroFramework.Controls.MetroLabel();
this.txtUsername = new MetroFramework.Controls.MetroTextBox();
this.label2 = new MetroFramework.Controls.MetroLabel();
this.txtPassword = new MetroFramework.Controls.MetroTextBox();
this.btnLogin = new MetroFramework.Controls.MetroButton();
this.btnCancel = new MetroFramework.Controls.MetroButton();
this.SuspendLayout();
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(25, 70);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(47, 19);
this.label1.TabIndex = 0;
this.label1.Text = "Логин:";
//
// txtUsername
//
this.txtUsername.Location = new System.Drawing.Point(80, 70);
this.txtUsername.Name = "txtUsername";
this.txtUsername.Size = new System.Drawing.Size(171, 23);
this.txtUsername.TabIndex = 1;
this.txtUsername.WaterMark = "Имя пользователя";
this.txtUsername.UseSelectable = true;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(25, 110);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(54, 19);
this.label2.TabIndex = 2;
this.label2.Text = "Пароль:";
//
// txtPassword
//
this.txtPassword.Location = new System.Drawing.Point(80, 110);
this.txtPassword.Name = "txtPassword";
this.txtPassword.PasswordChar = '●';
this.txtPassword.Size = new System.Drawing.Size(171, 23);
this.txtPassword.TabIndex = 3;
this.txtPassword.UseSystemPasswordChar = true;
this.txtPassword.WaterMark = "Пароль";
this.txtPassword.UseSelectable = true;
//
// btnLogin
//
this.btnLogin.Location = new System.Drawing.Point(60, 150);
this.btnLogin.Name = "btnLogin";
this.btnLogin.Size = new System.Drawing.Size(86, 32);
this.btnLogin.TabIndex = 4;
this.btnLogin.Text = "Войти";
this.btnLogin.UseCustomBackColor = true;
this.btnLogin.UseCustomForeColor = true;
this.btnLogin.BackColor = System.Drawing.Color.FromArgb(0, 174, 219);
this.btnLogin.ForeColor = System.Drawing.Color.White;
this.btnLogin.UseSelectable = true;
this.btnLogin.Click += new System.EventHandler(this.btnLogin_Click);
//
// btnCancel
//
this.btnCancel.Location = new System.Drawing.Point(160, 150);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(86, 32);
this.btnCancel.TabIndex = 5;
this.btnCancel.Text = "Отмена";
this.btnCancel.UseCustomBackColor = true;
this.btnCancel.BackColor = System.Drawing.Color.FromArgb(204, 204, 204);
this.btnCancel.UseSelectable = true;
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
//
// LoginForm
//
this.AcceptButton = this.btnLogin;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(280, 200);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnLogin);
this.Controls.Add(this.txtPassword);
this.Controls.Add(this.label2);
this.Controls.Add(this.txtUsername);
this.Controls.Add(this.label1);
this.DisplayHeader = true;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "LoginForm";
this.Padding = new System.Windows.Forms.Padding(20, 60, 20, 20);
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Авторизация";
this.Style = MetroFramework.MetroColorStyle.Blue;
this.Theme = MetroFramework.MetroThemeStyle.Light;
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private MetroFramework.Controls.MetroLabel label1;
private MetroFramework.Controls.MetroTextBox txtUsername;
private MetroFramework.Controls.MetroLabel label2;
private MetroFramework.Controls.MetroTextBox txtPassword;
private MetroFramework.Controls.MetroButton btnLogin;
private MetroFramework.Controls.MetroButton btnCancel;
}
}

61
LoginForm.cs Normal file
View File

@ -0,0 +1,61 @@
using System;
using System.Windows.Forms;
using MetroFramework.Forms;
namespace Учетещей
{
public partial class LoginForm : MetroForm
{
public User CurrentUser { get; private set; }
public LoginForm()
{
InitializeComponent();
// Настройка темы и стиля
this.Theme = MetroFramework.MetroThemeStyle.Light;
this.Style = MetroFramework.MetroColorStyle.Blue;
this.Text = "Авторизация";
}
private void btnLogin_Click(object sender, EventArgs e)
{
string username = txtUsername.Text;
string password = txtPassword.Text;
if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
{
MetroFramework.MetroMessageBox.Show(this,
"Пожалуйста, заполните все поля",
"Ошибка",
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
return;
}
CurrentUser = DbManager.Authenticate(username, password);
if (CurrentUser != null)
{
DialogResult = DialogResult.OK;
Close();
}
else
{
MetroFramework.MetroMessageBox.Show(this,
"Неверное имя пользователя или пароль",
"Ошибка авторизации",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
txtPassword.Clear();
txtUsername.Focus();
}
}
private void btnCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
}
}

120
LoginForm.resx Normal file
View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

55
Models.cs Normal file
View File

@ -0,0 +1,55 @@
using System;
namespace Учетещей
{
// Перечисление для типов оборудования
public enum DeviceType
{
Компьютер,
Ноутбук,
Монитор,
Принтер,
Сканер,
МФУ,
Проектор,
Другое
}
// Перечисление для состояния техники
public enum DeviceState
{
Исправен,
Ремонт,
Списан
}
// Класс для хранения данных о технике
public class Device
{
public int Id { get; set; }
public string Name { get; set; }
public string InventoryNumber { get; set; }
public DeviceType Type { get; set; }
public string Location { get; set; }
public string ResponsiblePerson { get; set; }
public DeviceState State { get; set; }
public DateTime RegistrationDate { get; set; }
public string TypeString => Type.ToString();
public string StateString => State.ToString();
}
// Класс для пользователей
public enum UserRole
{
User,
Admin
}
public class User
{
public string Username { get; set; }
public string Password { get; set; }
public UserRole Role { get; set; }
}
}

20
Program.cs Normal file
View File

@ -0,0 +1,20 @@
using System;
using System.Windows.Forms;
namespace Учетещей
{
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// Инициализируем базу данных при запуске приложения
DbManager.InitializeDatabase();
Application.Run(new Form1());
}
}
}

View File

@ -0,0 +1,33 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Общие сведения об этой сборке предоставляются следующим набором
// набора атрибутов. Измените значения этих атрибутов для изменения сведений,
// связанных со сборкой.
[assembly: AssemblyTitle("Учет вещей")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Учет вещей")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми
// для компонентов COM. Если необходимо обратиться к типу в этой сборке через
// COM, следует установить атрибут ComVisible в TRUE для этого типа.
[assembly: ComVisible(false)]
// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
[assembly: Guid("434c186d-c95a-4abf-ac2c-b33cd21b0f50")]
// Сведения о версии сборки состоят из указанных ниже четырех значений:
//
// Основной номер версии
// Дополнительный номер версии
// Номер сборки
// Редакция
//
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

71
Properties/Resources.Designer.cs generated Normal file
View File

@ -0,0 +1,71 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Этот код создан программным средством.
// Версия среды выполнения: 4.0.30319.42000
//
// Изменения в этом файле могут привести к неправильному поведению и будут утрачены, если
// код создан повторно.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Учетещей.Properties
{
/// <summary>
/// Класс ресурсов со строгим типом для поиска локализованных строк и пр.
/// </summary>
// Этот класс был автоматически создан при помощи StronglyTypedResourceBuilder
// класс с помощью таких средств, как ResGen или Visual Studio.
// Для добавления или удаления члена измените файл .ResX, а затем перезапустите ResGen
// с параметром /str или заново постройте свой VS-проект.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
/// <summary>
/// Возврат кэшированного экземпляра ResourceManager, используемого этим классом.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Учет_вещей.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Переопределяет свойство CurrentUICulture текущего потока для всех
/// подстановки ресурсов с помощью этого класса ресурсов со строгим типом.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}

117
Properties/Resources.resx Normal file
View File

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

30
Properties/Settings.Designer.cs generated Normal file
View File

@ -0,0 +1,30 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Учетещей.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}

View File

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

10
packages.config Normal file
View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="EntityFramework" version="6.4.4" targetFramework="net472" />
<package id="MetroModernUI" version="1.4.0.0" targetFramework="net472" />
<package id="Stub.System.Data.SQLite.Core.NetFramework" version="1.0.119.0" targetFramework="net472" />
<package id="System.Data.SQLite" version="1.0.119.0" targetFramework="net472" />
<package id="System.Data.SQLite.Core" version="1.0.119.0" targetFramework="net472" />
<package id="System.Data.SQLite.EF6" version="1.0.119.0" targetFramework="net472" />
<package id="System.Data.SQLite.Linq" version="1.0.119.0" targetFramework="net472" />
</packages>

133
Учет вещей.csproj Normal file
View File

@ -0,0 +1,133 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="packages\EntityFramework.6.4.4\build\EntityFramework.props" Condition="Exists('packages\EntityFramework.6.4.4\build\EntityFramework.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{434C186D-C95A-4ABF-AC2C-B33CD21B0F50}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>Учет_вещей</RootNamespace>
<AssemblyName>Учет вещей</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>packages\EntityFramework.6.4.4\lib\net45\EntityFramework.dll</HintPath>
</Reference>
<Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>packages\EntityFramework.6.4.4\lib\net45\EntityFramework.SqlServer.dll</HintPath>
</Reference>
<Reference Include="MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a, processorArchitecture=MSIL">
<HintPath>packages\MetroModernUI.1.4.0.0\lib\net\MetroFramework.dll</HintPath>
</Reference>
<Reference Include="MetroFramework.Design, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a, processorArchitecture=MSIL">
<HintPath>packages\MetroModernUI.1.4.0.0\lib\net\MetroFramework.Design.dll</HintPath>
</Reference>
<Reference Include="MetroFramework.Fonts, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a, processorArchitecture=MSIL">
<HintPath>packages\MetroModernUI.1.4.0.0\lib\net\MetroFramework.Fonts.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Core" />
<Reference Include="System.Data.SQLite, Version=1.0.119.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.119.0\lib\net46\System.Data.SQLite.dll</HintPath>
</Reference>
<Reference Include="System.Data.SQLite.EF6, Version=1.0.119.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>packages\System.Data.SQLite.EF6.1.0.119.0\lib\net46\System.Data.SQLite.EF6.dll</HintPath>
</Reference>
<Reference Include="System.Data.SQLite.Linq, Version=1.0.119.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>packages\System.Data.SQLite.Linq.1.0.119.0\lib\net46\System.Data.SQLite.Linq.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="DbManager.cs" />
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="LoginForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="LoginForm.Designer.cs">
<DependentUpon>LoginForm.cs</DependentUpon>
</Compile>
<Compile Include="Models.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="LoginForm.resx">
<DependentUpon>LoginForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>Данный проект ссылается на пакеты NuGet, отсутствующие на этом компьютере. Используйте восстановление пакетов NuGet, чтобы скачать их. Дополнительную информацию см. по адресу: http://go.microsoft.com/fwlink/?LinkID=322105. Отсутствует следующий файл: {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('packages\EntityFramework.6.4.4\build\EntityFramework.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\EntityFramework.6.4.4\build\EntityFramework.props'))" />
<Error Condition="!Exists('packages\EntityFramework.6.4.4\build\EntityFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\EntityFramework.6.4.4\build\EntityFramework.targets'))" />
<Error Condition="!Exists('packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.119.0\build\net46\Stub.System.Data.SQLite.Core.NetFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.119.0\build\net46\Stub.System.Data.SQLite.Core.NetFramework.targets'))" />
</Target>
<Import Project="packages\EntityFramework.6.4.4\build\EntityFramework.targets" Condition="Exists('packages\EntityFramework.6.4.4\build\EntityFramework.targets')" />
<Import Project="packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.119.0\build\net46\Stub.System.Data.SQLite.Core.NetFramework.targets" Condition="Exists('packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.119.0\build\net46\Stub.System.Data.SQLite.Core.NetFramework.targets')" />
</Project>

25
Учет вещей.sln Normal file
View File

@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.13.35828.75 d17.13
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Учет вещей", "Учет вещей.csproj", "{434C186D-C95A-4ABF-AC2C-B33CD21B0F50}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{434C186D-C95A-4ABF-AC2C-B33CD21B0F50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{434C186D-C95A-4ABF-AC2C-B33CD21B0F50}.Debug|Any CPU.Build.0 = Debug|Any CPU
{434C186D-C95A-4ABF-AC2C-B33CD21B0F50}.Release|Any CPU.ActiveCfg = Release|Any CPU
{434C186D-C95A-4ABF-AC2C-B33CD21B0F50}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {4C9ECF4C-F9F0-4D09-AFFF-0E7E5B855495}
EndGlobalSection
EndGlobal