Как обновить целевую ячейку CurrentRow в DataGridView в C #? - PullRequest
0 голосов
/ 01 марта 2019

В моем приложении Windows Form * DataGridView обновляется из TextChanged_Event текстового поля (функция чтения штрих-кода).Каждая новая строка имеет значения, такие как Название продукта, Количество, Цена за единицу товара и Общая сумма .Значения Название продукта и Цена за единицу товара поступают из базы данных, в то время как я установил значение по умолчанию 1 для Количество .Значение Общая сумма является умножением Количество и Цена за единицу .

До сих пор все работает нормально, и я могу использоватьзначение по умолчанию 1 для продажи Количество каждого товара.Однако, если я хочу продать товар более одного раза, мне нужно заменить это значение количества по умолчанию на пользовательское значение.

Чтобы упростить этот процесс, я использовал Дочернюю форму с одним текстовым полем и кнопкой, которая позволит моему пользователю поставить пользовательское значение для столбца Количество, которое должно заменить значение по умолчанию 1 столбца Количество.

Я пробовал разные подходы, но безуспешно.Потому что я показываю дочернюю форму в той части процесса продажи, где приложение должно искать дублирующийся продукт в DataGridView .Если элемент уже присутствует в DataGridView, приложение запрашивает его добавление снова, и когда пользователь нажимает кнопку «Да», отображается дочерняя форма .

Так что это делает мою логикубессмысленно, потому что после отображения и обработки пользовательского текстового поля «Количество» в дочерней форме я не могу получить доступ к переменной в родительской форме для замены значения по умолчанию 1 на это пользовательское количество.

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

Вот мой код:

public void FillCurrentSoldItemGrid(string barCode)
    {
        string columnList = "ProductName, UnitPrice";
        DataRow dr = NewSale.SelectByItemCode(columnList, barCode);
        if (dr == null)
        {
            //show error message
            return;
        }
        // check duplicate value in DataGridView
        string productName = dr[0].ToString();
        if (dgvSoldItems.RowCount > 0)
        {
            foreach (DataGridViewRow dgvRow in dgvSoldItems.Rows)
            {
                if (dgvRow.Cells[0].Value.ToString().CompareTo(productName) == 0)
                {
                    if (DataAccess.AskUser("This item is already present in the grid?", "Confirm Item Quantity Update") == true)
                    {
            //my child form code
                        using (var customSaleQuantity = new frmCustomSaleQuantity())
                        {
                            var result = customSaleQuantity.ShowDialog();
                            if (result == DialogResult.OK)
                            {
                //need to assign this value of the customQuantity string to int quantity which is holding a default 1 value)
                                string customQuantity = customSaleQuantity.GetCustomQuantity;
                            }
                        }
                    }
                }
            }
        }
    //value of string customQuantity to be assigned to int quantity.
        int quantity = 1;
        int unitPrice = Convert.ToInt32(dr[1]);

        DataGridViewRow row = new DataGridViewRow();
        row.CreateCells(dgvAllSoldItems);

        row.Cells[0].Value = productName;
        row.Cells[1].Value = quantity;
        row.Cells[2].Value = unitPrice;
        row.Cells[3].Value = (quantity * unitPrice);

        dgvAllSoldItems.Rows.Add(row);
    }

А здеськод из моей дочерней формы:

public string GetCustomQuantity
    {
        get;
        set;
    }

    private void btnProceedWithNewItemQuantity_Click(object sender, EventArgs e)
    {
        this.GetCustomQuantity = txtChooseSaleQuantity.Text.Trim();
        this.Close();
    }

Я новичок в c #, и у меня нет ни малейшего представления о том, как заменить значение по умолчанию 1 значением на пользовательское значение, если обнаружен дублирующий элемент,Это действительно важная задача, и мой срок почти закончен.

Любая помощь будет высоко оценена.

1 Ответ

0 голосов
/ 01 марта 2019

Есть много способов улучшить логику;однако один из способов - применить концепцию объектно-ориентированного программирования (ООП).Определите статический класс для хранения глобальных переменных, полей и функций.Как только пользователь вводит данные в дочернюю форму, передайте эту информацию в методы получения / установки статического класса.Кроме того, в вашем статическом классе вы можете определить публичную функцию для обработки данных.Не забудьте обновить GridView для просмотра обновленной информации.Основная причина, по которой я рекомендую использовать статический класс, заключается в том, что вы можете вызывать открытые атрибуты, методы из любой точки вашего приложения, и вам не нужно создавать экземпляр объекта класса.

static class Globals
{
    // global int 
    public static int counter;

    // global function
    public static string HelloWorld()
    {
        return "Hello World";
    }
}

Globals.counter = 10;
int localcounter = Globals.counter;
string somestring = Globals.HelloWorld();
Globals.counter2 = 30;
int localcounter2 = Globals.counter2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...