Я пытаюсь найти в моем заполненном ListView конкретную дату, используя datetimepicker
.Я только хочу выполнить поиск и получить результат в части даты компонента DateTime
.
Я пытался преобразовать мой datetimepicker (dtpStartDate)
в короткую строку даты в моем коде кнопки поиска (мой текущий метод ниже выдаетошибка "преобразование типа данных varchar
в тип данных DateTime
привело к значению вне допустимого диапазона").
Я также пытался
dtpStartDate = Convert.ToDateTime(System.DateTime.Now.ToShortDateString("dd-MM-yyyy"));
но ToShortDateString
подчеркивается красным.
Я также пытался
string dt = dtpStartDate.Value.ToShortDateString();
, затем искал значение dt, но это та же самая ошибка varchar
, что и выше.
Это мой код для отображения всех продаж из базы данных SQL Server в моем списке просмотра:
private void DisplaySales()
{
string selectQuery;
selectQuery = "SELECT Sales.SaleID, Customers.CustomerID, Products.ProductID, ";
selectQuery = selectQuery + "Sales.Payable, Sales.StartDate ";
selectQuery = selectQuery + "FROM Sales INNER JOIN ";
selectQuery = selectQuery + "Customers ON Sales.CustomerID = Customers.CustomerID ";
selectQuery = selectQuery + "INNER JOIN Products ON Sales.ProductID = Products.ProductID ";
selectQuery = selectQuery + " " + GlobalVariables.saleSearchCriteria;
SqlConnection conn = ConnectionManagerClass.ConnectionManager.DatabaseConnection();
SqlDataReader rdr = null;
try
{
SqlCommand cmd = new SqlCommand(selectQuery, conn);
conn.Open();
rdr = cmd.ExecuteReader();
while (rdr.Read())
{
// Define the list items
Business_Logic_Layer.SaleInfoClass sale = new Business_Logic_Layer.SaleInfoClass(int.Parse(rdr["SaleID"].ToString()),
(rdr["CustomerID"].ToString()),
(rdr["ProductID"].ToString()),
(rdr["Payable"].ToString()),
(DateTime.Parse(rdr["StartDate"].ToString())));
ListViewItem lvi = new ListViewItem(sale.SaleID.ToString());
lvi.SubItems.Add(sale.CustomerID.ToString());
lvi.SubItems.Add(sale.ProductID.ToString());
lvi.SubItems.Add(sale.Payable);
lvi.SubItems.Add(sale.StartDate.ToString());
lvSales.Items.Add(lvi);
}
if (rdr != null)
rdr.Close();
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show("Unsuccessful" + ex);
}
}
Это мой код для добавления продажи в базу данных:
private void btnSave_Click(object sender, EventArgs e)
{
Business_Logic_Layer.SaleInfoClass sale = new Business_Logic_Layer.SaleInfoClass(GlobalVariables.selectedSaleID, txtCustomerID.Text,
lbProductID.Items[cbProductID.SelectedIndex].ToString(),
cbPayable.Text, dtpStartDate.Value);
string addQuery;
if (GlobalVariables.selectedSaleID == 0)
{
addQuery = "sp_Sales_CreateSale";
}
else
{
addQuery = "sp_Sales_UpdateSale";
}
SqlConnection conn = ConnectionManagerClass.ConnectionManager.DatabaseConnection();
conn.Open();
SqlCommand cmd = new SqlCommand(addQuery, conn);
cmd.CommandType = CommandType.StoredProcedure;
if (GlobalVariables.selectedSaleID != 0)
{
cmd.Parameters.AddWithValue("@SaleID", sale.SaleID);
}
cmd.Parameters.AddWithValue("@CustomerID", sale.CustomerID);
cmd.Parameters.AddWithValue("@ProductID", sale.ProductID);
cmd.Parameters.AddWithValue("@Payable", sale.Payable);
cmd.Parameters.AddWithValue("@StartDate", Convert.ToDateTime(sale.StartDate));
if (GlobalVariables.selectedSaleID == 0)
{
cmd.Parameters.AddWithValue("@NewSaleID", SqlDbType.Int).Direction = ParameterDirection.Output;
}
//Confirm user input
//Cancel if user chooses 'No'
if (MessageBox.Show("Would you like to save this Sale?", "Confirm", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
cmd.Transaction = conn.BeginTransaction();
cmd.ExecuteNonQuery();
cmd.Transaction.Commit();
this.Close();
}
conn.Close();
this.Close();
}
И это мой код для поиска продажи:
private void btnSearch_Click(object sender, EventArgs e)
{
dtpStartDate.Text = DateTime.Now.ToShortDateString();
if (rbStartDate.Checked == true)
{
GlobalVariables.saleSearchCriteria = "WHERE StartDate = '" + dtpStartDate.Text + "'";
}
this.Close();
}