#c# #.net #windows #winforms #datagridview
#c# #.net #Windows #winforms #datagridview
Вопрос:
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
row.Cells[dataGridView1.Columns["Amount"].Index].Value = (Convert.ToDecimal(row.Cells[dataGridView1.Columns["Qtty"].Index].Value) *
Convert.ToDecimal(row.Cells[dataGridView1.Columns["PurchasePrice"].Index].Value));
decimal sum = 0;
for (int i = 0; i < dataGridView1.Rows.Count; i )
{
sum = Convert.ToDecimal(dataGridView1.Rows[i].Cells[6].Value);
}
decimal vatpct = 15m;
decimal vat = Math.Round(sum - (sum / (1 (vatpct / 100))), 2);
decimal subtotal = Math.Round(sum - vat, 2);
lblSubtotal.Text = subtotal.ToString();
row.Cells[dataGridView1.Columns["VAT"].Index].Value = ((sum * vat / 100));
}
}
Это мой код, касающийся моего дизайна счета-фактуры, но он не так хорошо работает с расчетом НДС.
Примечание: все цены здесь должны быть с учетом НДС!
Ответ №1:
Упростите себе жизнь, поместите данные и вычисления в таблицу данных и привяжите ее к сетке:
var dt = new DataTable();
dt.Columns.Add("InvoiceId");
dt.Columns.Add("ExVat", typeof(double));
dt.Columns.Add("IncVat", typeof(double)).Expression = "[ExVat] * 1.15";
someNewBlankDataGridViewOnYourForm.DataSource = dt;
Как следует из последней строки кода, вероятно, проще всего, если вы добавите новый datagridview в свою форму и привяжете его к этому datatable (установите его свойство DataSource)
Теперь все, что вам нужно сделать, это заставить пользователя ввести идентификатор и сумму НДС. Сумма ндс inc будет рассчитана автоматически
Сделайте свою жизнь еще проще, добавьте в свой проект файл нового типа DataSet, добавьте к нему таблицу, добавьте столбцы и задайте в конструкторе все те вещи, которые вы видите выше (выражение, тип данных, имя и т.д.).. таблицы данных, созданные таким образом, представляют собой кучи, с которыми легче работать
Комментарии:
1. Спасибо @Caius может быть, вам легко это сделать, но для меня я все еще не понимаю, как использовать набор данных с помощью DGV и соединяться друг с другом… на самом деле я новичок в разработке C #, поэтому, если вы можете написать строки кода, чтобы помочь мне в этом, как вы сказали выше, или помочь с моим кодом здесь, чтобы сделать это
2. Можете ли вы определить, в чем проблемы, из-за которых НДС отображается неправильно?
3. Затем быстро бегите вниз: набор данных представляет собой набор данных и данных. Вы не используете DataSet в этом коде. DataTable — это набор DataRow и DataColumn, что-то вроде базы данных. В DataColumn либо помещены значения, либо они вычисляют значения на основе других столбцов, используя свойство Expression
4. Когда я сказал «добавить набор данных», я имел в виду щелкнуть правой кнопкой мыши по вашему проекту в обозревателе решений и выбрать Добавить новый элемент.. Набор данных. Затем вы можете визуально спроектировать все эти настройки. Это процесс, отличный от написания, например
var da = new DataSet();
, который создает простой простой набор данных, который нигде не является таким многофункциональным, как добавление файла набора данных в проект, а затем его проектирование5. Это примерно то же самое, что и при добавлении формы. Вы можете писать в коде
var f = new Form();
, но эта форма просто пуста и т.д. Если вы добавите форму в виде файла, а затем откроете ее, вы сможете полностью ее спроектировать и т. Д., И вы можете заглянуть в Form1.Designer.cs, чтобы увидеть сотни строк кода, которые разработчик формы написал для вас. Файлы набора данных и дизайнеры — это та же идея