Рейтинг:
9
Eric Lynch
Я предполагаю, что показанный код находится в обработчике нажатия кнопки. Если это так, то ваша проблема заключается в том, что "CurrentRow" всегда будет только одной строкой, которая в данный момент активна.
Хотя я не думаю, что это хороший подход, следующее было бы близко к вашему намерению (в вопросе):
foreach (DataGridViewRow row in dataGridView1.Rows)
{
int total = 0;
for (int index = 1; index < row.Cells.Count; index++)
total += Convert.ToInt32(row.Cells[index].Value);
row.Cells[0].Value = total;
}
Кроме того, я не знаю, как вам посоветовать. Мне нужно больше информации.
Пользовательский интерфейс, который вы выбрали, немного странный. Вы можете рассмотреть что-то другое, но опять же, возможно, у вас есть странное требование :)
Я бы, вероятно, также предложил изменить список объектов или таблицу данных, поддерживая представление сетки, вместо того чтобы непосредственно изменять само представление сетки. Затем вы можете повторно запустить привязку данных.
Однако и здесь мне не хватает адекватной информации из вашего вопроса, чтобы быть уверенным, что это лучший совет.
Member 13854008
Этот код не работает,он показывает ошибку(входная строка была не в правильном формате).
не могли бы вы,пожалуйста, прислать мне код для меня, его очень urgent.....by одним нажатием кнопки Мне нужно полное количество строк в столбце "всего"
Eric Lynch
Как уже упоминалось, есть почти наверняка лучшие подходы. Однако без лучшего понимания своей цели трудно дать лучший совет. Как минимум, мне нужно было бы увидеть, как вы заполняете DataGridView, типы данных столбцов, имена столбцов, включенных в итоговое значение, и имя столбца, чтобы получить итоговое значение. Опять же, предполагая, что вы заполняете сетку через Источник данных, вы, вероятно, вычисляете суммы в источнике, а не в самой сетке.
Пример, который я привел, просто суммирует все столбцы (кроме первого), он предполагает, что все столбцы имеют значение, которое может быть преобразовано в целое число, и он помещает общую сумму в первый столбец.
Полный источник для тестового жгута, который я скинул вместе (очень быстро), есть...
использование системы;
использование системы.Коллекции.Общий;
использование системы.Окна.Формы;
пространство имен WindowsFormsApp1
{
общественности частичного класс form1 : форма
{
открытый form1()
{
метод InitializeComponent();
}
отдельный список<объект MyObject&ГТ; значения = новый список<объект MyObject&ГТ;
{
новый MyObject { Col2 = 1, Col3 = 2, Col4 = 3},
новый MyObject { Col2 = 4, Col3 = 5, Col4 = 6},
новый MyObject { Col2 = 7, Col3 = 8, Col4 = 9},
новый MyObject { Col2 = 10, Col3 = 11, Col4 = 12}
};
частный недействительными методе form1_load(объект отправителя, EventArgs в электронной)
{
dataGridView1.DataSource = значения;
}
частный класс MyObject
{
public int Col1 { get; set; }
public int Col2 { get; set; }
public int Col3 { get; set; }
public int Col4 { get; set; }
}
частный недействительными обработчика button1_click(объект отправителя, EventArgs в электронной)
{
по каждому элементу (ячейки datagridviewrow строку в dataGridView1.Строк)
{
int total = 0;
for (int index = 1; index < row.Ячейки.Count; index++)
итого += конвертация.ToInt32(row.Cells[index].Value);
ряд.Ячейки[0].значение = всего;
}
}
}
}
Предполагая, что вы хотите суммировать все столбцы, кроме одного с именем "Col1", и поместить туда результат, код нажатия кнопки изменится следующим образом:
int totalIndex = 0;
for (int index = 0; index < dataGridView1.Columns.Count; index++)
if (dataGridView1.Columns[index].Name == "Col1")
{
totalIndex = индекс;
перерыв;
}
по каждому элементу (ячейки datagridviewrow строку в dataGridView1.Строк)
{
int total = 0;
for (int index = 0; index < row.Ячейки.Count; index++)
if (index != totalIndex)
итого += конвертация.ToInt32(row.Cells[index].Value);
ряд.Ячейки[totalIndex].Value = total;
}
Однако я еще раз подчеркну, что мне (или кому-либо еще) требуется больше информации, чтобы дать хороший ответ. Если это вам не поможет, вам нужно будет либо пометить проблему как не решенную (если это позволяет), либо повторно опубликовать ее. Я могу быть недоступен в течение некоторого времени, поэтому кому-то еще может понадобиться продолжить с того места, где я остановился.
Member 13854008
сэр ,эта проблема была решена.спасибо Вам большое за ваш ответ сэр ..ваш код был правильным, ошибка get bcoz of my mistake ur code was right one tanku very much