Обработка пустых ячеек в 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