private ListViewItem ТолькоДобавитьЗапись(ТипЗаписи Элемент) { var item = Помощник.СвойствоКакЭлемнтТаблицы(this.listView1.Columns[0], Элемент); if (Элемент.ВизуальныйЭлемент != null) { item.Checked = Элемент.ВизуальныйЭлемент.Checked; } Элемент.ВизуальныйЭлемент = item; for (int i = 1; i < this.listView1.Columns.Count; i++) { item.SubItems.Add(Помощник.СвойствоКакПодЭлемнтТаблицы(this.listView1.Columns[i], Элемент)); } this.Перекрасить(item, Элемент); this.listView1.Items.Add(item); // выбор группы if (Элемент.Группа != null) { var Группа = this.listView1.Groups.Cast <ListViewGroup>().FirstOrDefault(x => x.Header == Элемент.Группа); if (Группа == null) { Группа = new ListViewGroup(Элемент.Группа); this.listView1.Groups.Add(Группа); } item.Group = Группа; } return(item); }
void Таблица_Обновлено() { // очистка this.listView1.Items.Clear(); this.listView1.Groups.Clear(); // применяем фильтр поиска IEnumerable <ТипЗаписи> ОтфильтрованныеТовары = null; if (this.Таблица.Поиск && !string.IsNullOrWhiteSpace(this.toolStripTextBox_Поиск.Text)) { // Получаем название фильтрованного свойства var Свойство = (PropertyInfo)this.поискToolStripMenuItem.Tag; // фильтр - поиск подстроки ОтфильтрованныеТовары = this.Таблица.Все.Where(x => Помощник.СвойствоКакСтрока(Свойство, x) != null && Помощник.СвойствоКакСтрока(Свойство, x).ToLower().IndexOf(this.toolStripTextBox_Поиск.Text.ToLower()) >= 0); } else { ОтфильтрованныеТовары = this.Таблица.Все; } // сортировка // Вывод списка this.listView1.BeginUpdate(); foreach (ТипЗаписи Элемент in ОтфильтрованныеТовары) { this.ТолькоДобавитьЗапись(Элемент); } this.listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); this.listView1.EndUpdate(); this.ОбновитьСтатусы(); }
public Form_ЗадатьЗначениеСвойства(PropertyInfo ИнформацияОСвойстве, Таблица ИнфТаблица) { InitializeComponent(); this.ИнфТаблица = ИнфТаблица; this.ИнформацияОСвойстве = ИнформацияОСвойстве; this.textBox_Значение.Text = Помощник.СвойствоКакСтрока(this.ИнформацияОСвойстве, this.ИнфТаблица); }
void Таблица_ОбновленаЗапись(ТипЗаписи obj) { var НужнаяЗапись = this.listView1.Items.Cast <ListViewItem>().Single(x => (ТипЗаписи)x.Tag == obj); for (int i = 0; i < this.listView1.Columns.Count; i++) { Помощник.ОбновитьПодЭлемнтТаблицы(НужнаяЗапись.SubItems[i], this.listView1.Columns[i], obj); } this.Перекрасить(НужнаяЗапись, obj); this.listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); this.ОбновитьСтатусы(); }
/// <summary> /// Обновляются тексты статуса (название, и значение) /// </summary> private void ОбновитьСтатусы() { foreach (ToolStripStatusLabel item in this.statusStrip1.Items) { var СвойствоСтатус = (KeyValuePair <PropertyInfo, string>)item.Tag; item.Text = string.Format("{0}: {1}", СвойствоСтатус.Value, Помощник.СвойствоКакСтрока(СвойствоСтатус.Key, this.Таблица)); } if (this.СтатусОбновлён != null) { this.СтатусОбновлён(this.Таблица, this.statusStrip1.Items); } }
public СортировщикКолонок(Type ТипЭлемента) : this(Помощник.ПолучитьОтображаемыеСвойства(ТипЭлемента)) { }
public ФормаТаблицы(Таблица <ТипЗаписи> Таблица, string ЗаголовокФормы = null, ВидОтображениеФормы ОтображениеФормы = ВидОтображениеФормы.Показ) { InitializeComponent(); this.Таблица = Таблица; this.ЗаголовокФормы = ЗаголовокФормы; this.ОтображениеФормы = ОтображениеФормы; // установка для выбора нескольких вариантов if (this.ОтображениеФормы == ВидОтображениеФормы.ВыборНескольких) { this.listView1.CheckBoxes = true; } var ОтображаемыеСвойства = Помощник.ПолучитьОтображаемыеСвойства <ТипЗаписи>(); // установка сортировщика this.lvwColumnSorter = new СортировщикКолонок <ТипЗаписи>(ОтображаемыеСвойства); this.listView1.ListViewItemSorter = this.lvwColumnSorter; // привязка событий к таблице this.Таблица.ДобавленаЗапись += new Action <ТипЗаписи, bool>(Таблица_ДобавленаЗапись); this.Таблица.УдаленаЗапись += new Action <ТипЗаписи>(Таблица_УдаленаЗапись); this.Таблица.ОбновлёнСтатус += new Action(Таблица_ОбновлёнСтатус); this.Таблица.Обновлено += new Action(Таблица_Обновлено); this.Таблица.ОбновленаЗапись += new Action <ТипЗаписи>(Таблица_ОбновленаЗапись); this.Таблица.азрешеноВизуальноеОбновление += new Action <bool>(Таблица_РазрешеноВизуальноеОбновление); this.Таблица.ПоказанаЗапись += new Action <ТипЗаписи, bool, bool>(Таблица_ПоказанаЗапись); // адаптируем колонки foreach (var Свойство in ОтображаемыеСвойства) { string НазваниеКолонки = ПолучитьНазваниеКолонки(Свойство); this.listView1.Columns.Add(НазваниеКолонки).Tag = Свойство; if (this.Таблица.Поиск) { var ПунктМеню = this.поискToolStripMenuItem.DropDownItems.Add(НазваниеКолонки); ПунктМеню.Tag = Свойство; ПунктМеню.Click += new EventHandler(this.ПунктМенюПоиска_Click); } } this.listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); // адаптируем статус foreach (var СвойствоСтатус in this.Таблица.GetType().GetProperties() .ToDictionary(x => x, y => Helper.Attr.BaseMethods.GetOne <СтатусAttribute>(y)) .Where(x => x.Value != null)) { var Надпись = new ToolStripStatusLabel(); Надпись.Tag = new KeyValuePair <PropertyInfo, string>(СвойствоСтатус.Key, string.IsNullOrWhiteSpace(СвойствоСтатус.Value.Подпись) ? СвойствоСтатус.Key.Name : СвойствоСтатус.Value.Подпись); // ссылка на изменение //if (СвойствоСтатус.Key.CanRead && СвойствоСтатус.Key.CanWrite) if (СвойствоСтатус.Value.Изменяемое) { Надпись.IsLink = true; Надпись.Click += new EventHandler(this.Надпись_Click); } this.statusStrip1.Items.Add(Надпись); } if (this.statusStrip1.Items.Count > 0) { this.ОбновитьСтатусы(); } else { // прячем статус this.statusStrip1.Visible = false; this.listView1.Height += this.statusStrip1.Height; } // адаптируем меню bool ПунктКонтекстногоМенюПоУмолчаниюУстановлен = false; bool ПунктКонтекстногоМенюПоУмолчаниюУстановлен2 = false; // -меняем меню, если таблица показана для выбора ToolStripMenuItem ЭлементВерхнегоМеню; switch (this.ОтображениеФормы) { case ВидОтображениеФормы.Выбор: // Выбрать ЭлементВерхнегоМеню = new ToolStripMenuItem("Выбрать"); ЭлементВерхнегоМеню.Font = new System.Drawing.Font(ЭлементВерхнегоМеню.Font, FontStyle.Bold); ЭлементВерхнегоМеню.Click += new EventHandler(ЭлементВерхнегоМеню_Click); this.menuStrip1.Items.Insert(this.ИндексВставки++, ЭлементВерхнегоМеню); break; case ВидОтображениеФормы.ВыборНескольких: // Выбрать ЭлементВерхнегоМеню = new ToolStripMenuItem("Выбрать"); ЭлементВерхнегоМеню.Click += new EventHandler(ЭлементВерхнегоМеню_Click); this.menuStrip1.Items.Insert(this.ИндексВставки++, ЭлементВерхнегоМеню); var ЭлементКонтекстногогоМеню = new ToolStripMenuItem("Выбрать"); ЭлементКонтекстногогоМеню.Click += new EventHandler(ЭлементВерхнегоМеню_Click); this.contextMenuStrip1.Items.Add(ЭлементКонтекстногогоМеню); // отметить все ЭлементВерхнегоМеню = new ToolStripMenuItem("Отметить все"); ЭлементВерхнегоМеню.Click += new EventHandler(ОтметитьВсе_Click); this.menuStrip1.Items.Insert(this.ИндексВставки++, ЭлементВерхнегоМеню); ЭлементКонтекстногогоМеню = new ToolStripMenuItem(ЭлементВерхнегоМеню.Text); ЭлементКонтекстногогоМеню.Click += new EventHandler(ОтметитьВсе_Click); this.contextMenuStrip1.Items.Add(ЭлементКонтекстногогоМеню); // снять все отметки ЭлементВерхнегоМеню = new ToolStripMenuItem("Снять все отметки"); ЭлементВерхнегоМеню.Click += new EventHandler(СнятьВсеОтметки_Click); this.menuStrip1.Items.Insert(this.ИндексВставки++, ЭлементВерхнегоМеню); ЭлементКонтекстногогоМеню = new ToolStripMenuItem(ЭлементВерхнегоМеню.Text); ЭлементКонтекстногогоМеню.Click += new EventHandler(СнятьВсеОтметки_Click); this.contextMenuStrip1.Items.Add(ЭлементКонтекстногогоМеню); // Инвертировать отметки ЭлементВерхнегоМеню = new ToolStripMenuItem("Инвертировать отметки"); ЭлементВерхнегоМеню.Click += new EventHandler(ИнвертироватьОтметки_Click); this.menuStrip1.Items.Insert(this.ИндексВставки++, ЭлементВерхнегоМеню); ЭлементКонтекстногогоМеню = new ToolStripMenuItem(ЭлементВерхнегоМеню.Text); ЭлементКонтекстногогоМеню.Click += new EventHandler(ИнвертироватьОтметки_Click); this.contextMenuStrip1.Items.Add(ЭлементКонтекстногогоМеню); break; default: foreach (var МетодФункция in this.Таблица.GetType().GetMethods().ToDictionary(x => x, y => Helper.Attr.BaseMethods.GetOne <ФункцияAttribute>(y)).Where(x => x.Value != null)) { string НазваниеСтатуса = !string.IsNullOrWhiteSpace(МетодФункция.Value.Подпись) ? МетодФункция.Value.Подпись : МетодФункция.Key.Name; //разбиваем на подменю var Подменю = НазваниеСтатуса.Split('/'); if (МетодФункция.Value.ВерхнееМеню) { // ищем/создаём подменю var КоллекцияПоискаПодменю = this.menuStrip1.Items; for (int i = 0; i < Подменю.Count() - 1; i++) { var НайденоеПодменю = КоллекцияПоискаПодменю .Cast <ToolStripItem>() .Where(x => x.GetType() == typeof(ToolStripMenuItem)) .Cast <ToolStripMenuItem>() .FirstOrDefault(x => x.Text == Подменю[i]); if (НайденоеПодменю == null) { НайденоеПодменю = new ToolStripMenuItem(Подменю[i]); if (i == 0) { КоллекцияПоискаПодменю.Insert(this.ИндексВставки++, НайденоеПодменю); } else { КоллекцияПоискаПодменю.Add(НайденоеПодменю); } } КоллекцияПоискаПодменю = НайденоеПодменю.DropDownItems; } НазваниеСтатуса = Подменю.Last(); // создаём пункт меню var ЭлементГлавногоМеню = new ToolStripMenuItem(НазваниеСтатуса); ЭлементГлавногоМеню.Tag = МетодФункция.Key; if (!this.Modal && !ПунктКонтекстногоМенюПоУмолчаниюУстановлен2 && МетодФункция.Value.ПоУмолчанию) { ЭлементГлавногоМеню.Font = new Font(ЭлементГлавногоМеню.Font, FontStyle.Bold); ПунктКонтекстногоМенюПоУмолчаниюУстановлен2 = true; } ЭлементГлавногоМеню.Click += new EventHandler(ЭлементГлавногоМеню_Click); if (КоллекцияПоискаПодменю == this.menuStrip1.Items) { КоллекцияПоискаПодменю.Insert(this.ИндексВставки++, ЭлементГлавногоМеню); } else { КоллекцияПоискаПодменю.Add(ЭлементГлавногоМеню); } } if (МетодФункция.Value.КонтекстноеМеню) { // ищем/создаём подменю var КоллекцияПоискаПодменю = this.contextMenuStrip1.Items; for (int i = 0; i < Подменю.Count() - 1; i++) { var НайденоеПодменю = КоллекцияПоискаПодменю .Cast <ToolStripItem>() .Where(x => x.GetType() == typeof(ToolStripMenuItem)) .Cast <ToolStripMenuItem>() .FirstOrDefault(x => x.Text == Подменю[i]); if (НайденоеПодменю == null) { НайденоеПодменю = new ToolStripMenuItem(Подменю[i]); КоллекцияПоискаПодменю.Add(НайденоеПодменю); } КоллекцияПоискаПодменю = НайденоеПодменю.DropDownItems; } НазваниеСтатуса = Подменю.Last(); var ЭлементКонтекстногоМеню = new ToolStripMenuItem(НазваниеСтатуса); ЭлементКонтекстногоМеню.Tag = МетодФункция.Key; if (!this.Modal && !ПунктКонтекстногоМенюПоУмолчаниюУстановлен && МетодФункция.Value.ПоУмолчанию) { ЭлементКонтекстногоМеню.Font = new Font(ЭлементКонтекстногоМеню.Font, FontStyle.Bold); ПунктКонтекстногоМенюПоУмолчаниюУстановлен = true; } else if (МетодФункция.Value.КлавишиВызова != Keys.None) { ЭлементКонтекстногоМеню.ShortcutKeys = МетодФункция.Value.КлавишиВызова; ЭлементКонтекстногоМеню.ShowShortcutKeys = true; } ЭлементКонтекстногоМеню.Click += new EventHandler(ЭлементГлавногоМеню_Click); КоллекцияПоискаПодменю.Add(ЭлементКонтекстногоМеню); } // скрытая функция if (!МетодФункция.Value.ВерхнееМеню && !МетодФункция.Value.КонтекстноеМеню) { this.СкрытыеФункции.Add(МетодФункция.Value.КлавишиВызова, МетодФункция.Key); } } break; } // даём возможность информационной таблице изменить меню this.Таблица.ФормированиеМенюЗавершено(this.menuStrip1, this.contextMenuStrip1); // если верхнее меню пустое (), то скрываем его if (this.menuStrip1.Items.Count == 2 && !this.Таблица.Поиск) { this.menuStrip1.Visible = false; var y = this.listView1.Location.Y; this.listView1.Location = new Point(this.listView1.Location.X, 0); this.listView1.Height += y; } // добавляем в меню "поиск", если нужно if (this.Таблица.Поиск) { ToolStripItem КнопкаПоиска = null; // ищем колонку поиска по умолчанию // (потом зделать поиск колонки поиска при адаптации колонок) foreach (var Свойство in typeof(ТипЗаписи).GetProperties()) { var АтрибутКолонкиВТаблице = Helper.Attr.BaseMethods.GetOne <КолонкаAttribute>(Свойство); if (АтрибутКолонкиВТаблице != null && АтрибутКолонкиВТаблице.ПоискПоУмолчанию) { var КнопкиМенюПоисков = this.поискToolStripMenuItem.DropDownItems.Cast <ToolStripItem>().Where(x => Свойство.Equals(x.Tag)).Take(1); if (КнопкиМенюПоисков.Count() > 0) { КнопкаПоиска = КнопкиМенюПоисков.First(); break; } } } if (КнопкаПоиска == null) { КнопкаПоиска = this.поискToolStripMenuItem.DropDownItems[0]; } // вызываем клик по первому полю поиска КнопкаПоиска.PerformClick(); } else { this.поискToolStripMenuItem.Visible = false; this.toolStripTextBox_Поиск.Visible = false; } }