Мне нужна помощь, чтобы правильно отобразить сумму НДС в datagridview

#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, чтобы увидеть сотни строк кода, которые разработчик формы написал для вас. Файлы набора данных и дизайнеры — это та же идея