Ошибка в столбце с автозаполнением
Привет Я создал текстовое поле автозаполнения для 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). Надеюсь, это лучшее объяснение.