Member 14085040 Ответов: 0

Ошибка в столбце с автозаполнением


Привет Я создал текстовое поле автозаполнения для Gridview.
Я выбрал значение из двух столбцов базы данных, один из которых-number (Kontonummer), а другой-text (Navn). Теперь, когда я нажимаю на нее, и число, и текст входят в ячейку, и это дает ошибку. Но мне нужно, чтобы в ячейку был вставлен только столбец чисел, который состоит всего из 4 цифр, когда мне нужно нажать на него. Вы можете мне помочь с этим?

Что я уже пробовал:

try
{
    
    string headerText = dgvAddKontoNr.Columns["Konto"].HeaderText;

    if (dgvAddKontoNr.CurrentCell.ColumnIndex == dgvAddKontoNr.Columns["Konto"].Index)
    {
        if (headerText.Equals("Konto"))
        {
            if (e.Control is TextBox)
            {
                tb = e.Control as TextBox;
                if (tb != null)
                {
                    tb.AutoCompleteMode = AutoCompleteMode.Suggest;
                    tb.AutoCompleteSource = AutoCompleteSource.CustomSource;
                    AutoCompleteStringCollection coll = new AutoCompleteStringCollection();
                    tb.AutoCompleteCustomSource = coll;
                    con.Open();
                    SqlDataAdapter da = new SqlDataAdapter("SELECT CAST(Kontonummer AS nvarchar (255)) + ' - ' + Navn AS Kontonummer FROM Kontoplan WHERE LockKonto = 'True' AND KlientId = (SELECT Id FROM Klient WHERE Navn = '" + bogf.cmbKlient.Text + "')", con);
                    DataTable dt = new DataTable();
                    da.Fill(dt);

                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        string konto = dt.Rows[i]["Kontonummer"].ToString();
                        //string navn = dt.Rows[i]["Navn"].ToString();
                        coll.Add(konto);
                        //coll.Add(navn);
                    }
                    con.Close();


                }
                tb.MinimumSize = new Size(345, 25);
                tb.BorderStyle = BorderStyle.Fixed3D;
            }
            
        }

        else
        {
            TextBox tb = e.Control as TextBox;

            if (tb != null)
            {
                tb.AutoCompleteMode = AutoCompleteMode.None;
            }
        }
    }    
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

BillWoodruff

"Теперь, когда я нажимаю на него", нажмите на что ? Покажите сигнатуру метода вашего кода: так мы знаем, как определяется e.

Member 14085040

@BillWoodruff. Привет. У меня есть gridview, где один из столбцов должен иметь значение из базы данных. Значение-это 4 цифры чисел (Kontonummer). Я сделал для него текстовое поле автозаполнения. В самом текстовом поле у меня есть несколько столбцов (Kontonummer + Navn). Однако в ячейке, когда я тестирую число, предложения от БД в текстовом поле приходят как (Kontonummer, так и Navn). Когда я нажимаю на строку в текстовом поле, оба (Kontonummer и Navn) входят в ячейку, это дает ошибку, так как свойства столбца (int), и мне нужно, чтобы в ячейку возвращалось только значение (Kontonummer). Надеюсь, это лучшее объяснение.

BillWoodruff

вы повторяете одно и то же сообщение, а не отвечаете на конкретные вопросы, которые вам задают, и предоставляете информацию. мы не сможем вам помочь, если вы сделаете это,

Richard Deeming

new SqlDataAdapter("SELECT CAST(Kontonummer AS nvarchar (255)) + ' - ' + Navn AS Kontonummer FROM Kontoplan WHERE LockKonto = 'True' AND KlientId = (SELECT Id FROM Klient WHERE Navn = '" + bogf.cmbKlient.Text + "')", con)

Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]

SqlDataAdapter da = new SqlDataAdapter("SELECT CAST(Kontonummer AS nvarchar (255)) + ' - ' + Navn AS Kontonummer FROM Kontoplan WHERE LockKonto = 'True' AND KlientId = (SELECT Id FROM Klient WHERE Navn = @Navn)", con);
da.SelectCommand.Parameters.AddWithValue("@Navn", bogf.cmbKlient.Text);

ZurdoDev

В чем же ошибка?

Member 14085040

@ZurdoDev. Hi. У меня есть gridview, где один из столбцов должен иметь значение из базы данных. Значение-это 4 цифры чисел (Kontonummer). Я сделал для него текстовое поле автозаполнения. В самом текстовом поле у меня есть несколько столбцов (Kontonummer + Navn). Однако в ячейке, когда я тестирую число, предложения от БД в текстовом поле приходят как (Kontonummer, так и Navn). Когда я нажимаю на строку в текстовом поле, оба (Kontonummer и Navn) входят в ячейку, это дает ошибку, так как свойства столбца (int), и мне нужно, чтобы в ячейку возвращалось только значение (Kontonummer). Надеюсь, это лучшее объяснение.

0 Ответов