c# winform部门管理系统

c# winform部门管理系统

在这里插入图片描述

数据库SQL语句脚本代码

CREATE TABLE Department(
    DepartmentID INT PRIMARY KEY IDENTITY(1,1),
    Name NVARCHAR(50) NOT NULL
);
SELECT * FROM Department
-- 插入部门数据
INSERT INTO Department (Name) VALUES ('人力资源部');
INSERT INTO Department (Name) VALUES ('技术部');
INSERT INTO Department (Name) VALUES ('市场部');
INSERT INTO Department (Name) VALUES ('销售部');

CREATE TABLE Employees_Lists(
    EmployeeID INT PRIMARY KEY IDENTITY(1,1),
    Name NVARCHAR(50) NOT NULL,
    DepartmentID INT,
    FOREIGN KEY (DepartmentID) REFERENCES Department(DepartmentID)
);
-- 插入员工数据
-- 假设`人力资源部`的DepartmentID是1
INSERT INTO Employees_Lists (Name, DepartmentID) VALUES ('张三', 1);
INSERT INTO Employees_Lists (Name, DepartmentID) VALUES ('李四', 1);

-- 假设`技术部`的DepartmentID是2
INSERT INTO Employees_Lists (Name, DepartmentID) VALUES ('王五', 2);
INSERT INTO Employees_Lists (Name, DepartmentID) VALUES ('赵六', 2);

-- 假设`市场部`的DepartmentID是3
INSERT INTO Employees_Lists (Name, DepartmentID) VALUES ('孙七', 3);

-- 假设`财务部`的DepartmentID是4
INSERT INTO Employees_Lists (Name, DepartmentID) VALUES ('周八', 4);
-- 查询获取数据
SELECT a.Name AS 员工,b.Name AS 部门 FROM Employees_Lists a RIGHT JOIN Department b 
ON a.DepartmentID = b.DepartmentID

C#代码实现

添加部门窗口

在这里插入图片描述

using System;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class 添加部门 : Form
    {
        // 数据库连接字符串
        private string connectionString = "server=172.0.0.1;uid=sa1;pwd=xyz@x123456;database=test";
        // 操作模式枚举
        enum Mode
        {
            Add,
            Edit
        }
        // 当前操作模式
        private Mode currentMode;
        private string currentDepartmentName; // 仅在编辑模式下使用
        public 添加部门()
        {
            InitializeComponent();
            ConfigureForm(Mode.Add, null);
        }

        // 修改部门的构造函数
        public 添加部门(string departmentName)
        {
            InitializeComponent();
            ConfigureForm(Mode.Edit, departmentName);
        }

        private void ConfigureForm(Mode mode, string departmentName)
        {
            this.MaximizeBox = false;
            this.FormBorderStyle = FormBorderStyle.FixedSingle; // 禁止调整窗体大小
            currentMode = mode;
            currentDepartmentName = departmentName;

            if (mode == Mode.Add)
            {
                this.Text = "添加部门";
            }
            else if (mode == Mode.Edit)
            {
                this.Text = "修改部门 - " + departmentName;
                departmentNameTextBox.Text = departmentName;
                btn_adddepartmentName.Text = "修改";
            }
        }
        private void btn_adddepartmentName_Click(object sender, EventArgs e)
        {
            string departmentName = departmentNameTextBox.Text.Trim();
            if (!string.IsNullOrEmpty(departmentName))
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    // 检查部门是否存在
                    string checkQuery = "SELECT COUNT(*) FROM Department WHERE Name = @Name";
                    using (SqlCommand checkCmd = new SqlCommand(checkQuery, conn))
                    {
                        checkCmd.Parameters.AddWithValue("@Name", departmentName);
                        conn.Open();
                        int count = (int)checkCmd.ExecuteScalar();
                        if (count > 0 && currentMode == Mode.Add)
                        {
                            MessageBox.Show("该部门已存在!" + departmentName);
                        }
                        else
                        {
                            if (currentMode == Mode.Add)
                            {
                                // 添加新部门
                                string insertQuery = "INSERT INTO Department (Name) VALUES (@Name)";
                                using (SqlCommand insertCmd = new SqlCommand(insertQuery, conn))
                                {
                                    insertCmd.Parameters.AddWithValue("@Name", departmentName);
                                    insertCmd.ExecuteNonQuery();
                                    MessageBox.Show("部门添加成功!");
                                }
                            }
                            else if (currentMode == Mode.Edit)
                            {
                                // 修改部门
                                string updateQuery = "UPDATE Department SET Name = @Name WHERE Name = @OldName";
                                using (SqlCommand updateCmd = new SqlCommand(updateQuery, conn))
                                {
                                    updateCmd.Parameters.AddWithValue("@Name", departmentName);
                                    updateCmd.Parameters.AddWithValue("@OldName", currentDepartmentName);
                                    updateCmd.ExecuteNonQuery();
                                    //Console.WriteLine("执行修改部门SQL语句脚本:" + updateQuery);
                                    MessageBox.Show("部门修改成功!");
                                }
                            }

                        }
                        conn.Close();
                    }
                }
            }
            else
            {
                MessageBox.Show("请输入部门名称!");
            }
        }
    }
}

添加员工窗口

在这里插入图片描述

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class 添加员工数据 : Form
    {
        // 数据库连接字符串
        private string connectionString = "server=172.0.0.1;uid=sa1;pwd=xyz@x123456;database=test";
        public 添加员工数据()
        {
            InitializeComponent();
            this.MaximizeBox = false;
            this.FormBorderStyle = FormBorderStyle.FixedSingle; // 禁止调整窗体大小
        }

        private void 添加员工数据_Load(object sender, EventArgs e)
        {
            departmentComboBox.DropDownStyle = ComboBoxStyle.DropDownList; // 设置为下拉列表模式
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                string query = "SELECT DepartmentID, Name FROM Department";
                using (SqlCommand cmd = new SqlCommand(query, conn))
                {
                    SqlDataAdapter da = new SqlDataAdapter(cmd);
                    DataTable dt = new DataTable();
                    da.Fill(dt);

                    departmentComboBox.DisplayMember = "Name";
                    departmentComboBox.ValueMember = "DepartmentID";
                    departmentComboBox.DataSource = dt;
                }
            }
        }

        private void addButton_Click(object sender, EventArgs e)
        {
            string employeeName = employeeNameTextBox.Text.Trim();
            var selectedDepartment = departmentComboBox.SelectedValue;

            if (!string.IsNullOrEmpty(employeeName) && selectedDepartment != null)
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    string query = "INSERT INTO Employees_Lists (Name, DepartmentID) VALUES (@Name, @DepartmentID)";
                    using (SqlCommand cmd = new SqlCommand(query, conn))
                    {
                        cmd.Parameters.AddWithValue("@Name", employeeName);
                        cmd.Parameters.AddWithValue("@DepartmentID", selectedDepartment);
                        conn.Open();
                        cmd.ExecuteNonQuery();
                        conn.Close();
                    }
                }
                MessageBox.Show("员工添加成功!");
            }
            else
            {
                MessageBox.Show("请输入员工信息并选择部门!");
            }
        }
    }
}

主窗口
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class 树结构 : Form
    {
        // 数据库连接字符串
        private string connectionString = "server=172.0.0.1;uid=sa1;pwd=xyz@x123456;database=test";
        public 树结构()
        {
            InitializeComponent();
            this.treeView1.NodeMouseClick += new TreeNodeMouseClickEventHandler(this.treeView1_NodeMouseClick);
            LoadDepartmentsAsync();
        }

        private async void LoadDepartmentsAsync()
        {
            List<Department> departments = await GetDepartmentsAsync();

            if (this.dgvDepartments.InvokeRequired)
            {
                this.dgvDepartments.Invoke(new Action(() => {
                    SetupDepartmentsDataGridView(departments);
                }));
            }
            else
            {
                SetupDepartmentsDataGridView(departments);
            }
        }

        private void SetupDepartmentsDataGridView(List<Department> departments)
        {
            this.dgvDepartments.DataSource = departments;
            // 设置 DataGridView 为只读
            this.dgvDepartments.ReadOnly = true;
            // 根据内容自动调整列宽度
            this.dgvDepartments.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            // 根据内容自动调整行高度(如果需要)
            this.dgvDepartments.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells;
            // 调用添加编辑按钮的方法
            AddEditButtonColumn();
        }

        private void AddEditButtonColumn()
        {
            if (!dgvDepartments.Columns.Contains("EditButton"))
            {
                DataGridViewButtonColumn editButtonColumn = new DataGridViewButtonColumn();
                editButtonColumn.HeaderText = "操作";
                editButtonColumn.Name = "EditButton";
                editButtonColumn.Text = "修改";
                editButtonColumn.UseColumnTextForButtonValue = true; // 这一行确保每个单元格显示"Edit"
                dgvDepartments.Columns.Add(editButtonColumn);

                // 为按钮点击事件添加事件处理程序
                dgvDepartments.CellClick += dgvDepartments_CellClick;
            }
            /*
            if (!dgvDepartments.Columns.Contains("AnotherEditButton"))
            {
                DataGridViewButtonColumn anotherEditButtonColumn = new DataGridViewButtonColumn();
                anotherEditButtonColumn.HeaderText = "操作";
                anotherEditButtonColumn.Name = "AnotherEditButton";
                anotherEditButtonColumn.Text = "编辑";
                anotherEditButtonColumn.UseColumnTextForButtonValue = true; // 这一行确保每个单元格显示"Edit"
                dgvDepartments.Columns.Add(anotherEditButtonColumn);

                // 为按钮点击事件添加事件处理程序
                dgvDepartments.CellClick += dgvDepartments_CellClick;
            }*/
        }

        private void dgvDepartments_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == dgvDepartments.Columns["EditButton"].Index && e.RowIndex >= 0)
            {
                DataGridViewRow row = dgvDepartments.Rows[e.RowIndex];
                row.ReadOnly = false; // 允许编辑当前行

                // 获取当前行部门名称
                string departmentName = row.Cells["Name"].Value.ToString();

                // 创建并显示编辑窗口
                添加部门 editDepartmentForm = new 添加部门(departmentName); // 假设"DepartmentNameColumn"是包含部门名称的列的名称
                editDepartmentForm.ShowDialog(); // 以模态方式打开编辑窗口
                LoadDepartmentsAsync();
                //MessageBox.Show($"Edit clicked for row {e.RowIndex}");
            }
        }

        private Task<List<Department>> GetDepartmentsAsync()
        {
            return Task.Run(() =>
            {
                List<Department> departments = new List<Department>();

                using (var conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    var cmd = new SqlCommand("SELECT * FROM Department", conn);
                    using (var reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            departments.Add(new Department
                            {
                                DepartmentID = reader.GetInt32(0),
                                Name = reader.GetString(1),
                            });
                        }
                    }
                }

                return departments;
            });
        }

        public class Department
        {
            public int DepartmentID { get; set; }
            public string Name { get; set; }
        }
        private void LoadDataButton_Click(object sender, EventArgs e)
        {
                treeView1.Nodes.Clear();

                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();

                    // 加载部门
                    using (SqlCommand cmd = new SqlCommand("SELECT DepartmentID, Name FROM Department", conn))
                    {
                        using (SqlDataReader reader = cmd.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                TreeNode deptNode = new TreeNode(reader["Name"].ToString());
                                deptNode.Tag = reader["DepartmentID"];
                                treeView1.Nodes.Add(deptNode);
                                // 加载当前部门的员工
                                LoadEmployeesForDepartment(deptNode);
                            }
                        }
                    }
                }
        }

        private void LoadEmployeesForDepartment(TreeNode deptNode)
        {
            int departmentId = (int)deptNode.Tag;
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();

                using (SqlCommand cmd = new SqlCommand("SELECT Name FROM Employees_Lists WHERE DepartmentID = @DepartmentID", conn))
                {
                    cmd.Parameters.AddWithValue("@DepartmentID", departmentId);

                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            TreeNode empNode = new TreeNode(reader["Name"].ToString());
                            deptNode.Nodes.Add(empNode);
                        }
                    }
                }
            }
        }

        /// <summary>
        /// 点击树结构中的部门获取数据库中员工的信息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            // 清除DataGridView中当前的数据
            dataGridView1.DataSource = null;
            dataGridView1.Rows.Clear();
            dataGridView1.ReadOnly = true;
            dataGridView1.AllowUserToAddRows = false;//删除空白行
            // 判断点击的是否是部门节点(通过检查Tag是否包含DepartmentID)
            if (e.Node.Nodes.Count == 0 && e.Node.Parent != null)
            {
                string employeeName = e.Node.Text; // 获取员工名字
                DataTable dataTable = new DataTable();
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    // 修改查询语句仅查询被点击的员工信息,这里假设每个员工名字是唯一的
                    string query = "SELECT Name AS 员工, DepartmentID AS 部门Id FROM Employees_Lists WHERE Name = @EmployeeName";
                    using (SqlCommand cmd = new SqlCommand(query, conn))
                    {
                        cmd.Parameters.AddWithValue("@EmployeeName", employeeName);
                        using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
                        {
                            adapter.Fill(dataTable);
                        }
                    }
                }
                // 将加载的数据显示在DataGridView中
                dataGridView1.DataSource = dataTable;

                // 将加载的数据显示在DataGridView中
                dataGridView1.DataSource = dataTable;
            }// 判断点击的是否是部门节点(通过检查Tag是否包含DepartmentID)
            else if (e.Node.Tag != null && int.TryParse(e.Node.Tag.ToString(), out int departmentId))
            {
                // 从数据库加载该部门下的所有员工信息
                DataTable dataTable = new DataTable();
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    string query = "SELECT a.Name AS 员工, b.Name AS 部门 FROM Employees_Lists a LEFT JOIN Department b ON a.DepartmentID = b.DepartmentID WHERE a.DepartmentID = @DepartmentID";
                    using (SqlCommand cmd = new SqlCommand(query, conn))
                    {
                        cmd.Parameters.AddWithValue("@DepartmentID", departmentId);
                        using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
                        {
                            adapter.Fill(dataTable);
                        }
                    }
                }
                // 将加载的数据显示在DataGridView中
                dataGridView1.DataSource = dataTable;
            }
        }

        private void Btn_AddDepartment_Click(object sender, EventArgs e)
        {
            Form AddDepartment = new 添加部门();
            AddDepartment.StartPosition = FormStartPosition.CenterScreen;
            AddDepartment.ShowDialog();
        }

        private void Btn_AddEmployee_Click(object sender, EventArgs e)
        {
            Form AddEmployee = new 添加员工数据();
            AddEmployee.StartPosition = FormStartPosition.CenterScreen;
            AddEmployee.ShowDialog();
        }

    }
}

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值