Изменение типа данных столбца, когда он связан с датируемым - PullRequest
0 голосов
/ 29 апреля 2020

Моя цель:

  • Создать систему баланса банка с перерывом баланса в день

Фактические результаты:

  • Я могу извлечь данные, которые я хочу получить из моей базы данных, суммировать баланс и заполнить сетку данных этим

что мне нужно:

  • Мне нужен перерыв в переходе каждого дня, который подскажет мне остаток дня ...

Проблема:

  • Я получаю ошибку, если пытаюсь ввести строку "Saldo" в столбце «Valor» (десятичный), который содержит все значения

  • Я попытался изменить «DataType» столбца «Valor», но в нем говорится, что я не могу изменить тип данных заполненной столбец.

Код

    Dim dt As New DataTable()

        Using adapter As New SqlDataAdapter("SELECT * FROM TAB_Movimentos 
                                         WHERE Banco = @Banco 
                                         ORDER BY Data ASC, Ordem ASC, Valor DESC, Histórico ASC", New SqlConnection(MontaStringConexaoSQLServer()))
            adapter.SelectCommand.Parameters.Add("@Banco", SqlDbType.Int).Value = cbBanco.Value
            adapter.Fill(dt)
        End Using

    tabHistorico.DataSource = dt.DefaultView

    linhasaldo as integer = 5

    Dim nlinha As DataRow = dt.NewRow
    nlinha("Valor") = "Saldo: "
    nlinha("Saldo") = saldo
    dt.Rows.InsertAt(nlinha, linhasaldo)

Это то, что я хочу, Мне нужно некоторое форматирование в значениях, я достиг этого, изменив мой SQL Тип данных столбца "Доблесть" для varchar

This's what I want, It need some formatting in values, I reached this changing my SQL

Это то, что у меня есть в данный момент, это " Табисторико "Датагрид

* 10 47 *

This's what I've in the moment, this's the

Это моя база данных

This's my database

1 Ответ

1 голос
/ 29 апреля 2020

Вместо изменения базовой таблицы для размещения строки в Valor приведите Valor к строке в вашем адаптере, чтобы она была временной. Это оставляет все ваши данные в таблице безопасными и доступными для любых других программ, которые у вас есть, но все же позволяет вам использовать их в качестве строки здесь и вставлять строки Saldo. Это также намного эффективнее по времени и памяти, чем чтение в таблице, а затем выполнение копирования и преобразования в нее. Для этого создайте строку QueryString в адаптере следующим образом:

SELECT Banco, Lancamento, Historico, Data
    , CONVERT(nvarchar(50),Valor) as Valor
    , Ordem 
FROM TAB_Movimentos 
WHERE Banco = @Banco 
ORDER BY Data ASC, Ordem ASC, Valor DESC, Histórico ASC

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

Обратите внимание, что в этом есть та же проблема, на которую указывает @OhBeWise - вы теряете форматирование чисел, потому что они больше не являются числами, что касается вашего DataGridView. Возможно, вы захотите использовать FORMAT () вместо CONVERT () (если он доступен в вашей версии SQL -SERVER)

...