Goran Bibic Ответов: 1

Приращение количества не работает с буквами только с числами


Some help
 
In line 10 setup IsLetterOrDigit..
 
When add some value in datagrid
 
 Line 34-39 have problem...
 
Every time add new row, if put number  it ok kolicina (quantity go up +1), if is bar code type vm1403 add new row...not kolicina (quantity) +1...why? Some help?

    int cqty = Convert.ToInt32(row.Cells["kolicina"].Value) + 1;  
      
                              if (textBox1.Text == row.Cells["bar_kod"].Value.ToString())  
                              {  
                                  row.Cells["kolicina"].Value = cqty;  


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

private void prijavaAction()  
      {  
          PullData();  
                
                
          int sno = dataGridView1.Rows.Count + 1;  
  
          SqlConnection con2 = new SqlConnection(con);  
  
          if (textBox1.Text.All(char.IsLetterOrDigit))  
  
          {  
              string queryString = "select [bar_kod], [naziv], [cijena_sa_porezom] from dbo.roba_usluge WHERE [bar_kod] = '" + textBox1.Text + "'";// pronaci artikl u bazi                
              using (SqlConnection connection = new SqlConnection(con))  
              {  
                  SqlCommand command = new SqlCommand(queryString, connection);  
                  connection.Open();  
                  SqlDataReader reader = command.ExecuteReader();  
  
  ///////////////////////////////////////////

here is error
                  var itemAndPrice = textBox1.Text;  
  
                  var SingleRow = (from Rows in dataGridView1.Rows.Cast<DataGridViewRow>() where !Rows.IsNewRow && Rows.Cells["bar_kod"].Value.ToString().ToUpper() == textBox1.Text.ToUpper() select Rows).FirstOrDefault();  
  
  
                  if (reader.Read())  
                  {  
  
                      bool barcodeexist = false;  
                      foreach (DataGridViewRow row in dataGridView1.Rows)  
                      {  
                          int cqty = Convert.ToInt32(row.Cells["kolicina"].Value) + 1;  
  
                          if (textBox1.Text == row.Cells["bar_kod"].Value.ToString())  
                          {  
                              row.Cells["kolicina"].Value = cqty;  
   ///////////////////////////////////////////


                              foreach (DataGridViewRow g1 in dataGridView1.Rows)  
                              {  
  
  
                                  g1.Cells["ukupno"].Value = (Convert.ToDouble(g1.Cells["kolicina"].Value) * Convert.ToDouble(g1.Cells["cijena"].Value)).ToString("0.00");  
  
                              }  

Richard MacCutchan

Ваш призыв к char.IsLetterOrDigit не соответствует документации (Обуглить.Метод IsLetterOrDigit (Система) | Microsoft Docs[^]). На самом деле этот код даже не должен компилироваться.

Goran Bibic

Что выбрать? Когда есть ситуация:
bar_code 123456 IsDigit (это нормально и работает quatity + 1)
bar_code VM123456 IsLetterOrDigit (это добавление новой строки с тем же элементом и качеством 1)

Какие-то рекомендации?

Richard MacCutchan

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

Richard MacCutchan

Ваш призыв к char.IsLetterOrDigit всегда возвращает True, если данные содержат все буквы или цифры. Поэтому вам нужен другой метод определения точного формата строки.

1 Ответов

Рейтинг:
1

Patrice T

string queryString = "select [bar_kod], [naziv], [cijena_sa_porezom] from dbo.roba_usluge WHERE [bar_kod] = '" + textBox1.Text + "'";

Не обязательно решение вашего вопроса, но у вас есть еще одна проблема.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]
Цитата:
Каждый раз добавляйте новую строку, если ставите номер it ok kolicina (количество идет вверх +1), Если есть штрих-код типа vm1403 добавляйте новую строку...не kolicina (количество) +1...Почему? Какая-то помощь?

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

Отладка кода C# в Visual Studio - YouTube[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Richard Deeming

Я потерял счет тому, сколько раз мы объясняли SQL-инъекцию оператору. Каждый раз, когда он(?) утверждает, что понимает, а затем возвращается с другим вопросом, демонстрирующим, что он полностью проигнорировал предупреждение.

Я не знаю, является ли это языковым барьером, - боюсь технического жаргона" барьер, или просто - мне было наплевать на это блестящее дерьмо." барьер.

Patrice T

Похоже на ОП легкий способ: мы делаем поиск :)