Member 14867079 Ответов: 1

Я хочу сохранить столбец datetime picker datagridview в базе данных.


Я использовал Datagridview, я извлекаю свои табличные данные в Datagridview.
И я добавляю флажок столбец и столбец даты в один и тот же элемент.
Когда я поставлю флажок, то эта строка должна быть сохранена в базе данных.
Для столбца даты я использую элемент управления datetime picker в datagridview (не отдельно в форме).
Когда я отлаживаю его, все столбцы можно сохранить, но не дату.
Теперь я не могу сохранить свою строку в базе данных.

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

Я использовал этот код для добавления datetime picker в datagridview.
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
	DateTimePicker dtp = new DateTimePicker();

	if (e.ColumnIndex == 1)
	{

		dtp = new DateTimePicker();

		dataGridView1.Controls.Add(dtp);

		dtp.Format = DateTimePickerFormat.Short;

		Rectangle oRectangle = dataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true);

		dtp.Size = new Size(oRectangle.Width, oRectangle.Height);

		dtp.Location = new Point(oRectangle.X, oRectangle.Y);

		dtp.Visible = true;
	}
}
Этот код предназначен для кнопки Сохранить, чтобы сохранить эту отмеченную строку в базе данных.
private void Btnsaveandpass_Click(object sender, EventArgs e)
{

	foreach (DataGridViewRow dr in dataGridView1.Rows)
	{
		bool checkboxselected = Convert.ToBoolean(dr.Cells["Column1"].Value);

		if (checkboxselected)
		{
			string insert = "insert into TBLDailyRecord values( @date ,@brandname, @generatedcode, @perpieceprice, @percentage, @soldprice)";
			SqlCommand cmd = new SqlCommand(insert, con);

			cmd.Parameters.AddWithValue("@date",dr.Cells[1].Value ); // I am getting error here.



			cmd.Parameters.AddWithValue("@brandname", dr.Cells[2].Value);

			cmd.Parameters.AddWithValue("@generatedcode", dr.Cells[3].Value);
			cmd.Parameters.AddWithValue("@perpieceprice", dr.Cells[4].Value);
			cmd.Parameters.AddWithValue("@percentage", dr.Cells[5].Value);
			cmd.Parameters.AddWithValue("@soldprice", dr.Cells[6].Value);
			con.Open();
			cmd.ExecuteNonQuery();

			con.Close();

		}
		label1.Text = "Selected rows save";
	}

MadMyche

Ваш код имеет комментарии "Я получаю здесь ошибку"... в чем же ошибка

Member 14867079

параметризованного запроса '(@дата тип nvarchar(4000), @Марка компрессора тип nvarchar(12), @генерируется НВА' ожидает, что параметр '@дата'. который не поставляется

MadMyche

Это означает, что значение извлекается из dr.Cells[1].Value является нулевой, в этом случае параметр не будет добавлен

Member 14867079

да, верно. Что же мне теперь делать? Мне нужна помощь

#realJSOP

Моя первая догадка заключается в том, чтобы выяснить, почему dr.Cells[1].Value является null, и исправить это. Я предполагаю, что значение ячейки равно a string, и ваш SQL ожидает a DateTime.

Кстати, когда вы вставляете данные в таблицу, вам действительно следует указать столбцы, для которых вы будете вставлять данные. Ваш оператор SQL не гарантированно будет работать так, как он написан в данный момент.

j snooze

Возможно, вы захотите взглянуть на эту ссылку, которая описывает, как сделать столбец datagridcolumn столбцом datetimepicker.

https://docs.microsoft.com/en-us/dotnet/framework/winforms/controls/how-to-host-controls-in-windows-forms-datagridview-cells?redirectedfrom=MSDN

1 Ответов

Рейтинг:
0

#realJSOP

Моя первая догадка заключается в том, чтобы выяснить, почему dr.Cells[1].Value является null, и исправить это. Я предполагаю, что значение ячейки равно a string, и ваш SQL ожидает a DateTime.

Кстати, когда вы вставляете данные в таблицу, вам действительно следует указать столбцы, для которых вы будете вставлять данные. Ваш оператор SQL не гарантированно будет работать так, как он написан в данный момент.