Окно формы TextBox не присваивает значение из таблицы данных - PullRequest
0 голосов
/ 29 октября 2018

// метод

    private void txtBoxDateView(string column_name, string txt_box_value)
    {
        if (ColumnName != null && txtBoxValue != null)
        {
            ColumnName = null;
            txtBoxValue = null;
        }
        ColumnName = column_name;
        txtBoxValue = txt_box_value;
        DV = new DataView(dt);

        DV.RowFilter = string.Format(column_name + " like '%{0}%'", txt_box_value);
        dgvInventory1.DataSource = DV;
    }

/ метод invoke

        private void txtName_TextChanged(object sender, EventArgs e)
    {
        txtBoxDateView("ItemName", txtBrand.Text);

    }


    //select data when double click

        private void dgvInventory1_MouseDoubleClick(object sender, MouseEventArgs e)
    {

        txtId.Text = dgvInventory1.CurrentRow.Cells[0].Value.ToString();
        txtCatg.Text = dgvInventory1.CurrentRow.Cells[1].Value.ToString();
        txtName.Text = dgvInventory1.CurrentRow.Cells[2].Value.ToString();
        //below this code doesnt assign value
        txtBrand.Text = dgvInventory1.CurrentRow.Cells[3].Value.ToString(); 
        txtLocation.Text = dgvInventory1.CurrentRow.Cells[4].Value.ToString();
        txtQty.Text = dgvInventory1.CurrentRow.Cells[5].Value.ToString(); // 
      txtqty this have another function to do

    }

когда я дважды щелкаю по строке, значение присваивается только txtId, txtName и txtCatg. Я проверил мою SSMS. Клетка правильная. и когда я отлаживаю, текстовое поле назначит "" пустое значение, даже если есть данные. после того, как я проверю несколько раз назад. txtBoxValue = txt_box_value; станет пустым при каждом запуске. он покажет только значение txtId.text. и все, кроме varchar (txtqty). Что-то не так с моим методом?

1 Ответ

0 голосов
/ 29 октября 2018

Я подозреваю, что событие изменения текста повлияет на CurrentRow

Когда срабатывает событие TextChange, происходит изменение источника данных с отфильтрованными записями.

чтобы преодолеть это. используйте приведенный ниже оператор в событии двойного щелчка мыши

        var dataRow = dataGridView1.CurrentRow.DataBoundItem as DataRowView;
        if (dataRow != null)
        {
            var row = dataRow.Row;
            txtId.Text = row.ItemArray[0].ToString();
            txtCatg.Text = row.ItemArray[1].ToString();
            txtName.Text = row.ItemArray[2].ToString();
            //below this code doesnt assign value
            txtBrand.Text = row.ItemArray[3].ToString();
            txtLocation.Text = row.ItemArray[4].ToString();
            txtQty.Text = row.ItemArray[5].ToString();
            //txtqty this have another function to do
        }

вышеуказанная строка не зависит от вида. И используя прямые строки таблицы данных. Также функция txtqty также вы можете использовать DataRow

...