Обработка пустых ячеек в DataGridView

Как обрабатывать пустые значения ячеек в DataGridView, где у меня есть 3 столбца (Название счета, Дебет, Кредит), в первом столбце пользователь выбирает учетную запись, затем вводит столбец Дебет или Кредит, оставляя пустую ячейку в каждой строке., У меня есть 3 таблицы для одной записи.

create table Debit (debit_id, amount, **acct_id, entry_id);
create table Credit (credit_id, amount, **acct_id, entry_id);
create table Entry (entry_id, date);

В основном я хочу, чтобы это выглядело так. То, что я сделал до сих пор, объединило эти 3 таблицы

SELECT  Entry.entry_id, Entry.Date, Debit.acct_id, Debit.amount, 
Credit.acct_id, Credit.amount FROM Entry FULL OUTER JOIN Debit
ON Entry.entry_id = Debit.entry_id FULL OUTER JOIN Credit
ON Entry.entry_id = Credit.entry_id

Имея 6 столбцов в DataGridView. Я до сих пор не думал о запросе, чтобы показать только 3 столбца, в которых дебетовые и кредитные счета находятся в одном столбце, а сумма - в соответствующем столбце, и, если было, как он обрабатывает пустые ячейки в столбце Дебет и кредит? То, что я сделал, работает, но с точки зрения удобства использования это не хорошо.

Можете ли вы предложить мне способы сделать это?

** Счетная таблица

3 ответа

Я думаю, что объединение поможет решить вашу проблему. Следующий запрос объединит оба набора результатов в один набор результатов:

выберите e.entry_id, e.Date, d.acct_id, d.amount из записи как e присоединиться к дебету как d на e.entry_id=d.entry_id

объединить всех

выберите e.entry_id, e.Date, c.acct_id, c.amount из записи как e присоединиться к кредиту как c на e.entry_id=c.entry_id

Я предполагаю, что (а) вы используете привязку данных и (б) это для ввода данных пользователем. Если это для ввода, то я бы отказался от привязки данных и заполнил / прочитал обратно из сетки в коде.

Если вы используете DataGridView Я бы порекомендовал использовать более объектно-ориентированный подход, а не передавать результаты SQL-запроса напрямую. Как вы вообще откладываете обновления с помощью этого метода?

Вот пример. Я знаю, что это в VB.Net, но все равно должно иметь смысл.

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim entries As List(Of AccountEntry) = RetrieveEntries()

        DataGridView1.DataSource = entries

    End Sub

    Public Class AccountEntry
        Public Property Id As Integer
        Public Property Debit As Nullable(Of Decimal)
        Public Property Credit As Nullable(Of Decimal)
        Public Property EntryDate As DateTime
    End Class

    Public Function RetrieveEntries() As List(Of AccountEntry)
        Dim returnEntries As List(Of AccountEntry) = Nothing
        ' Do your database stuff here to retrieve a list of AccountEntry'
        Return returnEntries
    End Function

End Class
Другие вопросы по тегам