Exemplo n.º 1
0
        private void AddListItem(DataRow dr, bool boss)
        {
            if (dr == null)
            {
                return;
            }

            PlaceListItem li;
            bool          mainJob = false;
            var           param   = new string[2];

            if ((dr["КодСотрудника"] != DBNull.Value))
            {
                param[0] = dr["Сотрудник"].ToString();
                param[1] = dr["Должность"].ToString();
                li       = new PlaceListItem(param)
                {
                    EmployeeID = (int)dr["КодСотрудника"]
                };

                var cowork = (byte)dr["Совместитель"];
                mainJob = (cowork == 0);
            }
            else
            {
                if (Free)
                {
                    param[0] = "[Вакантно]";
                    param[1] = dr["Должность"].ToString();
                    li       = new PlaceListItem(param);
                }
                else
                {
                    return;
                }
            }

            li.PlaceID = (int)dr["КодДолжности"];

            if (boss)
            {
                li.ForeColor = Color.Blue;
            }
            else
            {
                if (!mainJob)
                {
                    li.ForeColor = Color.DarkGray;
                }
            }

            list.Items.Add(li);
        }
        private bool ListFindNext()
        {
            if (searchString.Length == 0)
            {
                return(false);
            }

            string selectString;

            int    employeeID   = 0;
            int    unitID       = 0;
            string employeeName = "";

            if (!employeeSelect.Places)                 // обычный режим - выбор сотрудников
            {
                selectString =
                    "SELECT TOP 1 КодСотрудника, Сотрудник, КодЛицаЗаказчика" +
                    " FROM Инвентаризация.dbo.Сотрудники" +
                    " WHERE Состояние <= @Status" +
                    " AND Сотрудник LIKE @SearchString" +
                    " AND Сотрудник > @LastFound";

                using (SqlCommand cmd = new SqlCommand(selectString))
                    using (cmd.Connection = new SqlConnection(employeeSelect.ConnectionString))
                    {
                        cmd.Connection.Open();

                        cmd.Parameters.Add(new SqlParameter("@Status", SqlDbType.Int)
                        {
                            Value = employeeSelect.Status
                        });
                        cmd.Parameters.Add(new SqlParameter("@SearchString", SqlDbType.NVarChar)
                        {
                            Value = "%" + searchString + "%"
                        });
                        cmd.Parameters.Add(new SqlParameter("@LastFound", SqlDbType.NVarChar)
                        {
                            Value = lastFound
                        });

                        try
                        {
                            using (SqlDataReader dr = cmd.ExecuteReader())
                            {
                                if (dr.Read())
                                {
                                    employeeID   = (int)dr["КодСотрудника"];
                                    unitID       = (int)dr["КодЛицаЗаказчика"];
                                    employeeName = dr["Сотрудник"].ToString();
                                }
                                dr.Close();
                            }
                        }
                        catch { }
                        finally
                        {
                            cmd.Connection.Close();
                        }
                    }
            }
            else                // выбор должностей
            {
                string likeString = "";

                if (rbEmployee.Checked)
                {
                    likeString = " AND Сотрудники.Сотрудник LIKE @SearchString";
                }

                if (rbPlace.Checked)
                {
                    likeString = " AND Должности.Должность LIKE @SearchString";
                }

                selectString =
                    "SELECT TOP 1 Должности.КодДолжности, Должности.Должность, Должности.КодСотрудника, Сотрудники.Сотрудник, Должности.Parent, Должности.Подразделение" +
                    " FROM Инвентаризация.dbo.vwДолжности Должности INNER JOIN" +
                    " Инвентаризация.dbo.Сотрудники Сотрудники ON Должности.КодСотрудника = Сотрудники.КодСотрудника" +
                    likeString +
                    " AND Сотрудники.Сотрудник > @LastFound" +
                    " ORDER BY Сотрудники.Сотрудник";

                using (SqlCommand cmd = new SqlCommand(selectString))
                    using (cmd.Connection = new SqlConnection(employeeSelect.ConnectionString))
                    {
                        cmd.Connection.Open();

                        cmd.Parameters.Add(new SqlParameter("@SearchString", SqlDbType.NVarChar)
                        {
                            Value = "%" + searchString + "%"
                        });
                        cmd.Parameters.Add(new SqlParameter("@LastFound", SqlDbType.NVarChar)
                        {
                            Value = lastFound
                        });

                        try
                        {
                            using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                            {
                                if (dr.Read())
                                {
                                    employeeID   = (int)dr["КодСотрудника"];
                                    employeeName = dr["Сотрудник"].ToString();

                                    string unitName = dr["Подразделение"].ToString();

                                    if (unitName != "")
                                    {
                                        unitID = (int)dr["КодДолжности"];
                                    }
                                    else
                                    {
                                        unitID = (int)dr["Parent"];
                                    }
                                }
                                dr.Close();
                            }
                        }
                        catch { }
                        finally
                        {
                            cmd.Connection.Close();
                        }
                    }
            }

            if (employeeID == 0)
            {
                if (lastFound == "")
                {
                    MessageBox.Show("Не найдено");
                }
                else
                {
                    if (MessageBox.Show("Не найдено, начать с начала?", "", MessageBoxButtons.YesNoCancel) == DialogResult.Yes)
                    {
                        lastFound = "";
                        return(ListFindNext());
                    }
                }
            }
            else                            // выделение соответствующего узла дерева и элемента в списке
            {
                if (!employeeSelect.Places) // по сотрудникам
                {
                    // выделяем узел в дереве

                    DTreeNode rootNode = (DTreeNode)employeeSelect.Tree.Nodes[0];
                    bool      found    = false;

                    for (int i = 0; i < rootNode.Nodes.Count; i++)
                    {
                        DTreeNode childNode = (DTreeNode)rootNode.Nodes[i];
                        if (childNode.ID == unitID)
                        {
                            if (employeeSelect.Tree.SelectedNode != childNode)
                            {
                                employeeSelect.Tree.SelectedNode = childNode;
                            }
                            found = true;
                            break;
                        }
                    }

                    if (!found)
                    {
                        employeeSelect.Tree.SelectedNode = rootNode;
                    }
                }
                else
                {
                    // выделяем узел в дереве

                    DTreeNode node = FindNode(unitID);
                    if (node != null)
                    {
                        employeeSelect.Tree.SelectedNode = node;
                    }
                }

                // выделяем сотрудника в списке

                ListView list = employeeSelect.List;

                list.BeginUpdate();

                list.SelectedItems.Clear();

                list.EndUpdate();

                for (int i = 0; i < list.Items.Count; i++)
                {
                    PlaceListItem li = (PlaceListItem)list.Items[i];

                    if (li.EmployeeID == employeeID)
                    {
                        li.Selected = true;
                        li.EnsureVisible();
                        lastFound = li.Text;
                        return(true);
                    }
                }
            }

            return(false);
        }
Exemplo n.º 3
0
        public void FillList(bool isSearch)
        {
            list.BeginUpdate();
            list.Items.Clear();
            int searchID = 0;

            DTreeNode node = tree.SelectedNode;
            DataTable dt   = null;

            if (node != null)
            {
                InitColumns();

                if (!Places)
                {
                    if (!isSearch)
                    {
                        dt = GetEmployees(node.ID);
                    }
                    else
                    {
                        int    unitID       = 0;
                        string employeeName = "";

                        const string selectString =
                            "SELECT TOP 1 КодСотрудника, Сотрудник, КодЛицаЗаказчика" +
                            " FROM Инвентаризация.dbo.Сотрудники" +
                            " WHERE Состояние <= @Status" +
                            " AND КодСотрудника = @EmpID";

                        using (var cmd = new SqlCommand(selectString))
                        {
                            cmd.Connection = new SqlConnection(connectionString);
                            cmd.Connection.Open();

                            cmd.Parameters.Add(new SqlParameter("@Status", SqlDbType.Int)
                            {
                                Value = Status
                            });
                            cmd.Parameters.Add(new SqlParameter("@EmpID", SqlDbType.Int)
                            {
                                Value = SearchingEmpID
                            });

                            try
                            {
                                using (SqlDataReader dr = cmd.ExecuteReader())
                                {
                                    if (dr.Read())
                                    {
                                        unitID       = (int)dr["КодЛицаЗаказчика"];
                                        employeeName = dr["Сотрудник"].ToString();
                                    }
                                }
                            }
                            catch { }
                            finally
                            {
                                cmd.Connection.Close();
                            }
                        }
                        if (unitID > 0)
                        {
                            tree.AfterSelect -= tree_AfterSelect;
                            SelectNode(unitID, tree.Nodes);
                            tree.Select();
                            dt = GetEmployees(unitID);
                            tree.AfterSelect += tree_AfterSelect;
                        }
                    }

                    if (dt != null)
                    {
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            var li = new PlaceListItem(dt.Rows[i]["Сотрудник"].ToString());
                            li.EmployeeID  = (int)dt.Rows[i]["КодСотрудника"];
                            li.ToolTipText = li.Text;
                            if (isSearch)
                            {
                                if (li.EmployeeID == SearchingEmpID)
                                {
                                    searchID = i;
                                }
                            }
                            list.Items.Add(li);
                        }
                    }
                }
                else
                {
                    if (tree.SelectedNode != null)
                    {
                        int id = tree.SelectedNode.ID;
                        AddListItem(GetPlace(id), true);

                        dt = GetSubPlaces(id);

                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            AddListItem(dt.Rows[i], false);
                        }
                    }
                }
            }

            list.EndUpdate();

            if (list.Items.Count > 0)
            {
                list.Items[searchID].Selected = true;
            }
            else
            {
                photo.Image = null;
                if (SelectedEmployeeChanged != null)
                {
                    SelectedEmployeeChanged(this, new EventArgs());
                }
            }
        }