2013-11-27 4 views
0

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

Это то, что код кнопки Деактивировать выглядит следующим образом:

Private Sub btnDeactivate_Click(sender As System.Object, e As EventArgs) Handles btnDeactivate.Click 
     Dim selectedCustomers = GetSelectedCustomers() 
     Dim newInActiveFlag = Not selectedCustomers.Any(Function(c) (c.Inactive_Flag = "Y")) 
     Dim activateWord = "Activate" 
     If newInActiveFlag Then 
      activateWord = "Deactivate" 
     End If 

     Dim result As DialogResult = MessageBox.Show(String.Format("Are you sure you want to {0} this Customer?", activateWord.ToLower()), activateWord + " Customer", _ 
                MessageBoxButtons.YesNo, MessageBoxIcon.Question) 
     If result = Windows.Forms.DialogResult.Yes Then 

      Dim selectedCustomerIds = selectedCustomers.Select(Function(c) (c.Cust_Num)) 

      Dim service = New DataService() 

      service.Customers.SetInactiveFlags(selectedCustomerIds, newInActiveFlag) 
      service.SaveChanges() 
      PerformSearch(_lastSearchTxt, _lastIncludeActive) 
     End If 
    End Sub 

Вот часть, где он устанавливает неактивный флаг и дата:

Public Sub SetInactiveFlags(custIds As IEnumerable(Of Integer), inactiveFlag As Boolean) 
     Dim customers As List(Of Customer) 
     customers = _context.Customers.Where(Function(c) (custIds.Contains(c.Cust_Num))).ToList() 

     For Each customer As Customer In customers 
      customer.Inactive_Flag = CreateFromBoolean(inactiveFlag) 
      customer.Inactive_Date = DateTime.Today 
     Next 

    End Sub 

Можно ли иметь один и тот же набор кнопок и удалить дату так же, как я установил ее и удалить флаг неактивности?

благодаря

+0

Мы не можем знать свойства в вашем классе Клиенты. Но код кажется прекрасным в случае наличия только двух свойств (Inactive_Flag и Inactive_Date); в случае наличия большего количества свойств (разные для Неактивных и для Активных), вы должны соответственно изменить SetInactiveFlags. Не могли бы вы объяснить, какая именно проблема у вас сейчас? Как вы должны установить/удалить неактивный флаг? Почему ваш код работает не так, как ожидалось? – varocarbas

+0

Проблема, с которой я столкнулся, заключается в том, что когда я иду активировать клиента, он не очищает неактивную дату, а вместо этого вставляет дату, в которую он был реактивирован. Чтобы установить/удалить неактивный флаг, я использую одну кнопку, текст которой меняет форму «Деактивировать» на «Активировать» в зависимости от наличия «Y» или «N» в поле Inactive_Flag и соответственно изменяет значение. –

+0

Вы просто хотите ввести другую дату, когда она деактивируется? Это легко, просто следуйте советам Тома (установите тип даты с нулевым значением и просто передайте Nothing при деактивации через условие в SetInactiveFlags или аргументе, как было предложено Томом); или создать «крайнюю дату» (например, 1-1-1900), которая будет использоваться для дезактивированных случаев, снова через условие/аргумент в SetInactiveFlags. – varocarbas

ответ

0

Предположив вы позволяете null значения на вашем Inactive_Date поле, вы можете просто установить его в настоящее время. Если вы измените метод SetInactiveFlags иметь Nullable (Of DateTime) параметра (? Или ярлык его с DateTime ала C#), вы можете передать его через непосредственно:

Public Sub SetInactiveFlags(custIds As IEnumerable(Of Integer), inactiveDate As DateTime?, inactiveFlag As Boolean) 
... 
customer.Inactive_Date = inactiveDate 
... 

Затем вы можете использовать SetInactiveFlags(selectedCustomerIds, Nothing, newInActiveFlag) или SetInactiveFlags(selectedCustomerIds, DateTime.Now, newInActiveFlag)

Сущность framework/Linq2Sql автоматически преобразует Nothing в DBNull.Value.

+0

Спасибо за помощь. Я нашел решение, но мне нужно подождать 8 часов, прежде чем я смогу опубликовать его, так как моя репутация меньше 10. Я обязательно отправлю его, как только смогу. –

0

Хорошо, я думаю, я нашел решение, я принял совет Тома и добавил это событие БТН клик:

If activateWord = "Deactivate" Then 
       service.Customers.SetInactiveFlags(selectedCustomerIds, DateTime.Today, newInActiveFlag) 
      ElseIf activateWord = "Activate" Then 
       service.Customers.SetInactiveFlags(selectedCustomerIds, Nothing, newInActiveFlag) 
      End If 

поэтому полный кусок выглядит следующим образом:

Private Sub btnDeactivate_Click(sender As System.Object, e As EventArgs) Handles btnDeactivate.Click 
     Dim selectedCustomers = GetSelectedCustomers() 
     Dim newInActiveFlag = Not selectedCustomers.Any(Function(c) (c.Inactive_Flag = "Y")) 
     Dim activateWord = "Activate" 
     If newInActiveFlag Then 
      activateWord = "Deactivate" 
     End If 

     Dim result As DialogResult = MessageBox.Show(String.Format("Are you sure you want to {0} this Customer?", activateWord.ToLower()), activateWord + " Customer", _ 
                MessageBoxButtons.YesNo, MessageBoxIcon.Question) 
     If result = Windows.Forms.DialogResult.Yes Then 

      Dim selectedCustomerIds = selectedCustomers.Select(Function(c) (c.Cust_Num)) 

      Dim service = New DataService() 
      If activateWord = "Deactivate" Then 
       service.Customers.SetInactiveFlags(selectedCustomerIds, DateTime.Today, newInActiveFlag) 
      ElseIf activateWord = "Activate" Then 
       service.Customers.SetInactiveFlags(selectedCustomerIds, Nothing, newInActiveFlag) 
      End If 
      service.SaveChanges() 
      PerformSearch(_lastSearchTxt, _lastIncludeActive) 
     End If 
    End Sub 

Я также изменил SetInactiveFlags выглядит так:

Public Sub SetInactiveFlags(custIds As IEnumerable(Of Integer), Inactive_Date As DateTime?, inactiveFlag As Boolean) 
     Dim customers As List(Of Customer) 
     customers = _context.Customers.Where(Function(c) (custIds.Contains(c.Cust_Num))).ToList() 

     For Each customer As Customer In customers 
      customer.Inactive_Flag = CreateFromBoolean(inactiveFlag) 
      customer.Inactive_Date = Inactive_Date 
     Next 

    End Sub 

Я взял минутку, чтобы понять логику, но спасибо за takin g время, чтобы помочь мне, я действительно ценю это.

Смежные вопросы