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); }
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()); } } }