NazneenSayed Ответов: 1

Добавить значения в gridview во время выполнения и сохранить их в базе данных?


Привет,

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

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

public void Fill_grid()
     {
         SqlCommand cmd = con.CreateCommand();
         cmd.CommandType = CommandType.Text;
        cmd.CommandText = "select * from DBTable";
         cmd.ExecuteNonQuery();
         DataTable dt = new DataTable();
         SqlDataAdapter da = new SqlDataAdapter(cmd);
         da.Fill(dt);
         dataGridView1.DataSource = dt;

     }

     private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
     {
         id = dataGridView1.Rows[e.RowIndex].Cells["id"].Value.ToString();
         if (id == "")
         {
             id1 = 0;
         }
         else
         {
             id1 = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells["id"].Value.ToString());
         }

         if (id1 == 0)
         {
             SqlCommand cmd = con.CreateCommand();
             cmd.CommandType = CommandType.Text;
             cmd.CommandText = "Insert into DBTable values('" + dataGridView1.Rows[e.RowIndex].Cells["FileName"].Value.ToString() + "','" + dataGridView1.Rows[e.RowIndex].Cells["Sequence"].Value.ToString() + "','" + dataGridView1.Rows[e.RowIndex].Cells["Delay"].Value.ToString() + "')";
             cmd.ExecuteNonQuery();
             Fill_grid();
         }

         else
         {
             SqlCommand cmd = con.CreateCommand();
             cmd.CommandType = CommandType.Text;
             cmd.CommandText = "update DBTable set Filename='" + dataGridView1.Rows[e.RowIndex].Cells["Filename"].Value.ToString() + "',Sequence='" + dataGridView1.Rows[e.RowIndex].Cells["Sequence"].Value.ToString() + "',Delay='" + dataGridView1.Rows[e.RowIndex].Cells["Delay"].Value.ToString() + "' where id=" + id1 + "";
             cmd.ExecuteNonQuery();
             Fill_grid();

         }

     }

1 Ответов

Рейтинг:
1

OriginalGriff

"Не работает" - это не полезный отчет об ошибке-он абсолютно ничего не говорит нам о том, что происходит.

Начните с исправления кода: никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.

После этого многое из этого будет зависеть от ваших данных и пользовательского ввода - и у нас нет доступа ни к одному из них!
Так что все будет зависеть от вас.
Поставьте точку останова на первой строке в dataGridView1_CellValueChanged функция, и запустите свой код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что именно то, что вы ожидали, произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас-вам пора освоить новый (и очень, очень полезный) навык: отладку!