XtraGridView не сохраняет последнюю строку в моей базе данных - PullRequest
0 голосов
/ 01 мая 2018

У меня странная проблема с моим кодом, XtraGridView не сохраняет последнюю строку, это мой код для добавления соединений в сетку данных

        void CreateDataTable()
    {
        dt.Columns.Add("Le Nom");
        dt.Columns.Add("Quantité");
        dt.Columns.Add("Longueur");
        dt.Columns.Add("Largeur");
        dt.Columns.Add("Poids Total");
        dt.Columns.Add("Projet");
        dt.Columns.Add("Localisation");
        dt.Columns.Add("Fournisseur");
        dt.Columns.Add("Date");
        dt.Columns.Add("IDNom");
        dt.Columns.Add("IDProjet");
        dt.Columns.Add("IDLocalisation");
        dt.Columns.Add("IDFournisseur");
        gridControl1.DataSource = dt;

    }

и это мой код для добавления данных в gridview

        private void btnSave_Click(object sender, EventArgs e)
    {
        DataRow r = dt.NewRow();

        r[0] = cmbName.Text;
        r[1] = txtQte.Text;
        r[2] = txtLength.Text;
        r[3] = txtWidth.Text;
        r[4] = txtWeight.Text;
        r[5] = cmbProject.Text;
        r[6] = cmbLocation.Text;
        r[7] = cmbProvider.Text;
        r[8] = txtDate.Text;
        r[9] = cmbName.SelectedValue;
        r[10] = cmbProject.SelectedValue;
        r[11] = cmbLocation.SelectedValue;
        r[12] = cmbProvider.SelectedValue;
        dt.Rows.Add(r);
    }

и это мой код для сохранения всех данных сетки в моей базе данных

        private void btnFinish_Click(object sender, EventArgs e)
    {
        for (int i=0;i<gridView1.RowCount-1;i++)
        {
                prd.Add_ItemQte(Convert.ToInt32(gridView1.GetRowCellValue(i, "IDNom")), Convert.ToInt32(gridView1.GetRowCellValue(i, "IDFournisseur")),
                Convert.ToInt32(gridView1.GetRowCellValue(i, "Quantité")), Convert.ToDateTime(gridView1.GetRowCellValue(i, "Date")),
                Convert.ToInt32(gridView1.GetRowCellValue(i, "Longueur")), Convert.ToInt32(gridView1.GetRowCellValue(i, "Largeur")),
                Convert.ToDouble(gridView1.GetRowCellValue(i, "Poids Total")), Convert.ToInt32(gridView1.GetRowCellValue(i, "IDLocalisation")), Convert.ToInt32(gridView1.GetRowCellValue(i, "IDProjet")));
        }
        MessageBox.Show("Ajouté avec succès", "Ajustements d'inventaire", MessageBoxButtons.OK, MessageBoxIcon.Information);

    }

Я пытаюсь добавить этот код перед сохранением данных в моей базе данных, но у меня не получилось

            if (gridView1.IsEditing)
            gridView1.CloseEditor();
        if (gridView1.FocusedRowModified)
            gridView1.UpdateCurrentRow();

если сетка данных имеет только одну строку (они ничего не сохраняют) если в сетке данных более одной строки (сохраните все строки, кроме последней) когда я запускаю код, я не получаю никакой ошибки. Кто-нибудь может мне помочь или показать, где я ошибся, заранее спасибо.

1 Ответ

0 голосов
/ 20 мая 2018

Ваш цикл имеет логическую проблему. Индексы строк начинаются с 0. Таким образом, если ваш gridView имеет 10 строк, он имеет RowCount 10 (индексы 0-9). Вы запускаете цикл gridView.RowCount-1. Означает, что вы исключаете последнюю строку из вашего цикла (RowCount 9, индексы 0-8).

Более того, я бы посоветовал вам зацикливать данные, а не зацикливать gridView для сохранения значений в базе данных.

for(int i = 0;i<dt.Rows.Count;i++)
{
//your code here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...