Как добавить строку в уже существующий столбец WPF?
Создаете класс со свойствами соответствующими столбцам, добавьте в разметку привязку.
Создайте наблюдаемую коллекцию ObeservableCollection которая будет хранить список элементов. Используйте ее в качестве источника данных (ItemsSource)
Решения вопроса 1
.NET программист, фрилансер.
Привет!
Вот самый простой пример как можно программно добавить данные в DataGrid:
using System.Windows; namespace WpfApp2 < public partial class MainWindow : Window < public MainWindow() < InitializeComponent(); dataGridView1.Items.Add(new TestData < Column1 = "Col1,Row1", Column2 = "Col2,Row1", Column3 = "Col3,Row1", Column4 = "Col4,Row1", Column5 = "Col5,Row1" >); dataGridView1.Items.Add(new TestData < Column1 = "Col1,Row2", Column2 = "Col2,Row2", Column3 = "Col3,Row2", Column4 = "Col4,Row2", Column5 = "Col5,Row2" >); dataGridView1.Items.Add(new TestData < Column1 = "Col1,Row3", Column2 = "Col2,Row3", Column3 = "Col3,Row3", Column4 = "Col4,Row3", Column5 = "Col5,Row3" >); > > public class TestData < public string Column1 < get; set; >public string Column2 < get; set; >public string Column3 < get; set; >public string Column4 < get; set; >public string Column5 < get; set; >> >
Результат:
Ответ написан более трёх лет назад
Нравится 2 5 комментариев
Foggy Finder @FoggyFinder
Способ может и простой, но не совсем верный, вот зачем добавлять данные в DataGrid подобным способом?
Согласен, можно было предложить и лучший вариант. Но зачем?
В данном случае спрашивающий не может даже просто вывести данные в таблицу. Есть ли смысл заморачиваться с ObservableCollection и привязками? Если он студент, то мой вариант вполне подойдёт, чтобы сдать работу. Если не студент и делает для себя, то тоже ничего плохого. позже сам поймёт, почему так лучше не делать )
К тому же в вопросе не было задачи предложить идеальное/лучшее/оптимальное решение.
К тому же данный вопрос легко гуглится и автор вопроса мог бы за десять минут сам найти ответ даже в рунете.
Исходя из всего вышесказанного считаю, что если приведённый мной пример работает, то значит на вопрос отвечает.
Приведите свой пример если не лень ) Будет только лучше!
c# windows forms Как добавить строку в datagridview для поиска содержимого
Как добавить строку в datagridview для поиска содержимого между header’ом и первой строкой. И как потом к этой строке прицепить событие на изменение текста?
dgvAirlines.DataSource = context.Airlines.OrderBy(x => x.Name).ToList();
Отслеживать
задан 11 июн 2023 в 18:59
У вас варианта 3: 1. Переписать стандартный контрол, добавив туда нужную логику (а ее там нет по умолчанию на сколько знаю) 2. Убрать заголовки, создать поля поиска, стилизовав их под заголовки таблицы, и под ними уже помещать основной компонент таблицы, без «шапки». 3. Найти что-то готовое. Первые два варианта, под WinForms. Изврат, но может вам понравиться, кто знает. Лично мой совет — посмотреть в сторону WPF, там стили и вообще контролы пишутся просто.
11 июн 2023 в 19:36
Переписать рендер заголовков. Ну или WPF, там проще. Еще можно поля поиска разместить над таблицей, а не в ней.
11 июн 2023 в 22:34
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Из изврата. Сделайте текст одного из заголовков подлинее, чтобы заголовок DataGridView был повыше (или принудительно установите высоту заголовка), а потом поверх наложите TextBox, у которого есть событие изменения содержимого.
Вот простой пример (.NET 7/C# 11):
using System.ComponentModel; using System.Runtime.CompilerServices; namespace WinFormsApp2; public class Form1 : Form, INotifyPropertyChanged < IContainer components = null; DataGridView dataGridView1; TextBox textBox1, textBox3; BindingList_persons; protected override void Dispose(bool disposing) < if (disposing && (components != null)) < components.Dispose(); >base.Dispose(disposing); > public BindingList Persons < get =>_persons; set < _persons = value; OnPropertyChanged(); >> public Form1() < SuspendLayout(); Controls.Add(textBox1 = new TextBox() < Location = new Point(163, 50), Name = nameof(textBox1), Size = new Size(100, 23) >); textBox1.TextChanged += textBox1_TextChanged; Controls.Add(textBox3 = new TextBox() < Location = new Point(63, 50), Name = nameof(textBox3), Size = new Size(100, 23) >); textBox3.TextChanged += textBox3_TextChanged; Controls.Add(dataGridView1 = new DataGridView() < Location = new Point(22, 19), Name = nameof(dataGridView1), Size = new Size(260, 180), ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize >); dataGridView1.RowTemplate.Height = 25; AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(310, 224); Name = Text = nameof(Form1); ResumeLayout(false); PerformLayout(); dataGridView1.DataBindings.Add("DataSource", this, nameof(Persons)); > protected override void OnLoad(EventArgs e) < Persons = new BindingList() < new Person < Name = "Иван", SurName = "Петров" >, new Person < Name = "Алексей", SurName = "Сидоров" >, new Person < Name = "Сергей", SurName = "Зудин" >, new Person < Name = "Андрей", SurName = "Вдовин" >, new Person < Name = "Пётр", SurName = "Красин" >, new Person < Name = "Дормидонт", SurName = "Семинарский" >>; > public event PropertyChangedEventHandler? PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); void textBox3_TextChanged(object? sender, EventArgs e) < var s = textBox3.Text.ToLower(); if (String.IsNullOrWhiteSpace(s)) return; var x = Persons.FirstOrDefault(f =>f.Name.ToLower().StartsWith(s)); if (x != null) dataGridView1.CurrentCell = dataGridView1.Rows[Persons.IndexOf(x)].Cells[0]; > void textBox1_TextChanged(object? sender, EventArgs e) < var s = textBox1.Text.ToLower(); if (String.IsNullOrWhiteSpace(s)) return; var x = Persons.FirstOrDefault(f =>f.SurName.ToLower().StartsWith(s)); if (x != null) dataGridView1.CurrentCell = dataGridView1.Rows[Persons.IndexOf(x)].Cells[1]; > > public class Person : INotifyPropertyChanged < string _name, _surName; [DisplayName("Имя ________ ________")] public string Name < get =>_name; set < _name = value; OnPropertyChanged(); >> [DisplayName("Фамилия ________ ________")] public string SurName < get =>_surName; set < _surName = value; OnPropertyChanged(); >> public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); > internal static class Program < [STAThread] static void Main() < ApplicationConfiguration.Initialize(); Application.Run(new Form1()); >>
Как добавить строку в datagridview
Как правильно добавить текст введенный в textBox’ы добавить в таблицу — DataGriwView?
Допустим есть два textBox’a и таблица, в один вводим значение для одного столбца, в другой для другого и оно добавляет..
Спросил kiborg
772 дн., 23 час., 18 мин. назад
Новые ответы
Добавить строки в DataGridView можно или программно, воспользовавшись методом Add коллекции строк(свойство DataGridView.Rows (типа DataGridViewRowCollection) обеспечивает доступ к такой коллекции), или подключив к нему некоторый источник данных.
Метод Add() имеет четыре варианта:
// добавляет одну строку, заполняя ее значениями по умолчанию int Add(); // добавляет одну строку, заполняя ее значениями из массива values int Add(params object[] values); // добавляет несколько строк, заполняя их значениями по умолчанию int Add(int count); // добавляет заранее созданную строку int Add(DataGridViewRow dataGridViewRow);
Можно ещё метод Insert() посмотреть.
Записная книжка программиста-новичка, C#, SQL, PHP и все-все-все
Я ведь это уже делал, но хрен теперь найдешь тот кусок кода, гуглим снова… Где бы найти простое и понятное руководство для начинающего, а не тонкости для мега-гуру?
Главная→C#→WinForms→ Выбираем/получаем выбранную строку/ячейку в DataGridView
Рубрики
Свежие записи
- Вырезаем числовую часть из начала строки в transact-sql
- Пул соединений с базой данных в ADO.NET / OleDb — как избежать проблем с утечкой соединений в ASP.NET (перевод)
- ASP .Net MVC, JQuery и AJAX — отсылаем данные на сервер
- Разделитель тысяч и дробной части для decimal
- Создаем расширенный Control в WinForms наследуясь от существующего
- Вставка строк и изменение границ ячеек в Excel Interop из C#
- Как прочитать данные из удаленного DataRow в DataTable
- Проблемы с кодировкой при копировании русского текста из MS SQL Studio в Outlook/Word/Office
- Как проверить, существует ли таблица в MS SQL Server перед удалением/созданием
- Очень просто.
- Получаем выбранные строки DataGridView, в котором выбраны только ячейки
- Ошибка в коде привела к убыткам в 476 миллионов долларов и банкротству компании
- Отслеживаем изменения выбранного значения в колонке ComboBox DataGridView (DataGridViewComboBoxColumn)
- Excel 2010, Windows 7, два монитора и «ошибка при направлении команды приложению»
- Удаляем default-ограничение (constraint) в Transact Sql
Свежие комментарии
- Kirill к записи Самоучитель по C# для начинающих. 01. Основы языка, переменные, логика, циклы.
- как избавиться от чувства вины к записи Как добавить строку/текст в начало файла в C# и .Net
- DannyLef к записи Полезные расширения-плагины для WordPress
- как избавиться от чувства вины к записи Как добавить строку/текст в начало файла в C# и .Net
- gweg2ehgwEHERWQHQ к записи Простейшее диалоговое окно-вопрос (MessageBox) в WindowsForms
Архивы
Мета
Выбираем/получаем выбранную строку/ячейку в DataGridView
Опубликовано 02.07.2012 автором Ведомир
Задача: получить выбранную в данный момент строку/ячейку DataGridView и/или выбрать ее. На самом деле это одна и та же задача, если количество строк и столбцов в гриде может непредсказуемо меняться. Мы конечно можем получить выбранный столбец через свойство SelectedRows, но для этого свойство SelectionMode должно быть установлено в FullRowSelect или RowHeaderSelect. Универсальный метод будет всегда работать через выбранную ячейку и свойство SelectedCells или CurrentCell
int selRowNum = _someDataGridView.SelectedCells[0].RowIndex;
int selRowNum = _someDataGridView.CurrentCell.RowIndex;
С выбором конкретной ячейки еще хуже, по-настоящему надежно будет работать только следующий код
int rowNum = 1; DataGridViewCell cell = _someDataGridView.Rows[rowNum].Cells[0]; _someDataGridView.CurrentCell = cell; _someDataGridView.CurrentCell.Selected = true; // в некоторых случаях без этого не работает
Упростить себе жизнь можно парой простых методов
public static void SelectDataGridViewCell(DataGridView dataGridView, int rowIndex, int cellIndex) < DataGridViewCell cell = dataGridView.Rows[rowIndex].Cells[0]; dataGridView.CurrentCell = cell; dataGridView.CurrentCell.Selected = true; >public static void SelectDataGridViewRow(DataGridView dataGridView, int rowNum) < SelectDataGridViewCell(dataGridView, rowNum, 0); >public static int CalculateNewSelRowIndex(int oldRowCount, int newRowCount, int oldRowIndex) < // если осталась только одна строка int newRowIndex = 0; if (newRowCount >= oldRowCount) < newRowIndex = oldRowIndex; >else if (newRowCount > 1) < newRowIndex = newRowCount - 1; >return newRowIndex; >