Как работать с представлением сетки данных в C# Windows Forms ⇐ C#
Как работать с представлением сетки данных в C# Windows Forms
Я запускаю код, и открывается winforms. Позже я ввожу дату в столбец 1, строку 1, например, 05.05.2023, в следующую строку я ввожу 03.05.2023, и она заменяет вторую строку первой строкой.
Так и должно быть. Позже я добавляю 04.05.2023 в 3-ю строку и она заменяется второй строкой. Пока здесь хорошо.
Всего у меня 5 столбцов, а столбцы 3 и 4 содержат числа с плавающей запятой, чтобы показать общее количество в последней строке.
Оба столбца содержат разные числа, поэтому итоговая сумма для обоих столбцов разная. Это тоже хорошо.
Проблема в том, что при изменении строки столбца 1 значения строк в столбцах 3 и 4 сбрасываются на 0. Я хочу сделать так, чтобы столбец 1 менял свое местоположение, а столбцы 3 и 4 меняли строки.
с использованием системы; использование System.Collections.Generic; использование System.ComponentModel; использование System.Data; использование System.Drawing; использование System.Globalization; используя System.Linq; использование System.Text; использование System.Threading.Tasks; использование System.Windows.Forms; пространство имен WindowsFormsApp1 { публичный частичный класс Form1: Форма { частный список dateList = новый список(); частный список columns3Values = новый список(); частный список columns4Values = новый список(); общедоступная форма1() { ИнициализироватьКомпонент(); } частная пустота Form1_Load (отправитель объекта, EventArgs e) { dataGridView1.Columns.Add("Столбец1", "Столбец 1"); dataGridView1.Columns.Add("Столбец2", "Столбец 2"); dataGridView1.Columns.Add("Столбец3", "Столбец 3"); dataGridView1.Columns.Add("Столбец4", "Столбец 4"); dataGridView1.Columns.Add("Столбец5", "Столбец 5"); // Добавляем начальную пустую строку внизу для отображения итогов dataGridView1.Rows.Add(); } Private void addButton_Click (отправитель объекта, EventArgs e) { // Проверяем, выделена ли хотя бы одна строка если (dataGridView1.SelectedRows.Count > 0) { // Получаем индекс первой выбранной строки int rowIndex = dataGridView1.SelectedRows[0].Index; // Добавляем новую строку над выбранной строкой dataGridView1.Rows.Insert(rowIndex, новый DataGridViewRow()); } еще { // Добавляем новую строку внизу dataGridView1.Rows.Add(новый DataGridViewRow()); } // Рассчитываем и отображаем итоги после добавления новой строки ВычислитьИОтобразитьИтоги(); } Private void RemoveButton_Click (отправитель объекта, EventArgs e) { пытаться { // Проверяем, есть ли строки в DataGridView если (dataGridView1.Rows.Count > 0) { // Проверяем, выделена ли хотя бы одна строка если (dataGridView1.SelectedRows.Count > 0) { // Получаем индекс первой выбранной строки int rowIndex = dataGridView1.SelectedRows[0].Index; // Удаляем выбранную строку dataGridView1.Rows.RemoveAt(rowIndex); // Удаляем соответствующие элементы из dateList, columns3Values и columns4Values dateList.RemoveAt(rowIndex); columns3Values.RemoveAt(rowIndex); columns4Values.RemoveAt(rowIndex); } } } поймать (Исключение ex) { MessageBox.Show("Произошла ошибка: " + ex.Message); } } частная пустота dataGridView1_CellContentClick (отправитель объекта, DataGridViewCellEventArgs e) { } частная пустота Form1_Click (отправитель объекта, EventArgs e) { // Отменяем выбор всех строк в DataGridView dataGridView1.ClearSelection(); } частная пустота dataGridView1_CellValueChanged (отправитель объекта, DataGridViewCellEventArgs e) { если (e.RowIndex >= 0 && e.ColumnIndex == 0) { строка newValue = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Значение как строка; если (IsValidDate(newValue)) { // Проверяем, редактируется ли дата, а не добавляется ли она если (e.RowIndex < dateList.Count) { // Получаем текущее значение даты в столбце 1 строка currentDate = dateList[e.RowIndex]; // Обновляем список дат и сортируем его dateList[e.RowIndex] = newValue; CustomSortDates(); // Обновляем значения в столбце 3 и столбце 4 для строк, в которых заменяется дата UpdateColumn3And4ForReplacedDates(currentDate, newValue); // Обновляем DataGridView ОбновлениеDataGridView(); } еще { // Добавляется новая дата, просто обновите dateList и отсортируйте ее dateList.Add(newValue); CustomSortDates(); // Вычисляем и устанавливаем начальные значения в столбце 3 и столбце 4 для новой строки CalculateAndSetColumn3And4Values(newValue, dateList.Count - 1); // Обновляем DataGridView ОбновлениеDataGridView(); } } } } частный float CalculateValueForColumn3 (строка даты) { вернуть 3.0f; } частный float CalculateValueForColumn4 (строка даты) { вернуть 4.0f; } Private void CalculateAndSetColumn3And4Values (строка даты, int rowIndex) { // Рассчитаем и установим значения в столбце 3 и столбце 4 на основе даты float вычисленноеЗначение3 = ВычислитьЗначениеДляСтолбца3(дата); float вычисленное значение4 = CalculateValueForColumn4 (дата); if (rowIndex >= 0 && rowIndex
Я запускаю код, и открывается winforms. Позже я ввожу дату в столбец 1, строку 1, например, 05.05.2023, в следующую строку я ввожу 03.05.2023, и она заменяет вторую строку первой строкой.
Так и должно быть. Позже я добавляю 04.05.2023 в 3-ю строку и она заменяется второй строкой. Пока здесь хорошо.
Всего у меня 5 столбцов, а столбцы 3 и 4 содержат числа с плавающей запятой, чтобы показать общее количество в последней строке.
Оба столбца содержат разные числа, поэтому итоговая сумма для обоих столбцов разная. Это тоже хорошо.
Проблема в том, что при изменении строки столбца 1 значения строк в столбцах 3 и 4 сбрасываются на 0. Я хочу сделать так, чтобы столбец 1 менял свое местоположение, а столбцы 3 и 4 меняли строки.
с использованием системы; использование System.Collections.Generic; использование System.ComponentModel; использование System.Data; использование System.Drawing; использование System.Globalization; используя System.Linq; использование System.Text; использование System.Threading.Tasks; использование System.Windows.Forms; пространство имен WindowsFormsApp1 { публичный частичный класс Form1: Форма { частный список dateList = новый список(); частный список columns3Values = новый список(); частный список columns4Values = новый список(); общедоступная форма1() { ИнициализироватьКомпонент(); } частная пустота Form1_Load (отправитель объекта, EventArgs e) { dataGridView1.Columns.Add("Столбец1", "Столбец 1"); dataGridView1.Columns.Add("Столбец2", "Столбец 2"); dataGridView1.Columns.Add("Столбец3", "Столбец 3"); dataGridView1.Columns.Add("Столбец4", "Столбец 4"); dataGridView1.Columns.Add("Столбец5", "Столбец 5"); // Добавляем начальную пустую строку внизу для отображения итогов dataGridView1.Rows.Add(); } Private void addButton_Click (отправитель объекта, EventArgs e) { // Проверяем, выделена ли хотя бы одна строка если (dataGridView1.SelectedRows.Count > 0) { // Получаем индекс первой выбранной строки int rowIndex = dataGridView1.SelectedRows[0].Index; // Добавляем новую строку над выбранной строкой dataGridView1.Rows.Insert(rowIndex, новый DataGridViewRow()); } еще { // Добавляем новую строку внизу dataGridView1.Rows.Add(новый DataGridViewRow()); } // Рассчитываем и отображаем итоги после добавления новой строки ВычислитьИОтобразитьИтоги(); } Private void RemoveButton_Click (отправитель объекта, EventArgs e) { пытаться { // Проверяем, есть ли строки в DataGridView если (dataGridView1.Rows.Count > 0) { // Проверяем, выделена ли хотя бы одна строка если (dataGridView1.SelectedRows.Count > 0) { // Получаем индекс первой выбранной строки int rowIndex = dataGridView1.SelectedRows[0].Index; // Удаляем выбранную строку dataGridView1.Rows.RemoveAt(rowIndex); // Удаляем соответствующие элементы из dateList, columns3Values и columns4Values dateList.RemoveAt(rowIndex); columns3Values.RemoveAt(rowIndex); columns4Values.RemoveAt(rowIndex); } } } поймать (Исключение ex) { MessageBox.Show("Произошла ошибка: " + ex.Message); } } частная пустота dataGridView1_CellContentClick (отправитель объекта, DataGridViewCellEventArgs e) { } частная пустота Form1_Click (отправитель объекта, EventArgs e) { // Отменяем выбор всех строк в DataGridView dataGridView1.ClearSelection(); } частная пустота dataGridView1_CellValueChanged (отправитель объекта, DataGridViewCellEventArgs e) { если (e.RowIndex >= 0 && e.ColumnIndex == 0) { строка newValue = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Значение как строка; если (IsValidDate(newValue)) { // Проверяем, редактируется ли дата, а не добавляется ли она если (e.RowIndex < dateList.Count) { // Получаем текущее значение даты в столбце 1 строка currentDate = dateList[e.RowIndex]; // Обновляем список дат и сортируем его dateList[e.RowIndex] = newValue; CustomSortDates(); // Обновляем значения в столбце 3 и столбце 4 для строк, в которых заменяется дата UpdateColumn3And4ForReplacedDates(currentDate, newValue); // Обновляем DataGridView ОбновлениеDataGridView(); } еще { // Добавляется новая дата, просто обновите dateList и отсортируйте ее dateList.Add(newValue); CustomSortDates(); // Вычисляем и устанавливаем начальные значения в столбце 3 и столбце 4 для новой строки CalculateAndSetColumn3And4Values(newValue, dateList.Count - 1); // Обновляем DataGridView ОбновлениеDataGridView(); } } } } частный float CalculateValueForColumn3 (строка даты) { вернуть 3.0f; } частный float CalculateValueForColumn4 (строка даты) { вернуть 4.0f; } Private void CalculateAndSetColumn3And4Values (строка даты, int rowIndex) { // Рассчитаем и установим значения в столбце 3 и столбце 4 на основе даты float вычисленноеЗначение3 = ВычислитьЗначениеДляСтолбца3(дата); float вычисленное значение4 = CalculateValueForColumn4 (дата); if (rowIndex >= 0 && rowIndex
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как создать экземпляр префаба с представлением в виде сетки в виде боковой камеры
Anonymous » » в форуме C# - 0 Ответы
- 20 Просмотры
-
Последнее сообщение Anonymous
-