VB.Netとグリッドコントロール内の日付の処理 - より良い方法ですか?
全体的なデザインは、VB.Netを使用してGridViewの(フェーズ1)から200-300レコードを編集できるようにすることです...私は私のアプリを実行している間、私は方法論を疑問視し、「より良い方法」があるかどう思って。データベース自体はSQL Server上にあります。ユーザーが「アプリケーション」に入力する列は数多くあり、必要に応じて「オフィスユーザー」によって編集/維持される列がいくつかあります。この継続的なメンテナンスにはいくつかの日程があり、それが私の質問の第一歩です。私はに走った
問題#1 ...コードの作業を持って、インターネット上の「解決策」を発見したが、それらに疑問を投げかけています
- 日付は、データベース内、および使用して、それらを読み取ろうとしてNULLですSqlDataReaderによってエラーが発生しました(DateオブジェクトにNULLを割り当てることはできません)。これは三項演算子を使用して "IsDBNull"を使用し、DBから読み取った値を代入するか、DateTime.MinValueを代入することにつながりました。問題は "解決されました" ...
問題#2 - 上記の方法を使用すると、VBの最小値である日付が表示されます。ユーザーが編集するフィールドに実際の日付が表示されます。欲しいです。この問題の唯一の解決策は、
日付をDateオブジェクトまたはStringオブジェクトに変換することでした。これにより、データベースでDateが元々NULLであったDateTime.MinValue(テスト可能)に変換しなければならなかった場合に、空の文字列をgridviewに代入できるようになり、次に別の3項演算子"ToString"変換、または空の文字列をgridviewフィールドに割り当てます。
今すぐOk - 編集が完了しました。私はいくつかの "ScriptManager.RegisterStartupScript"コマンドを追加して、ユーザーが入力した日付の有効性をテストできるようにしました。すべて正常です。
問題3(または4) - ユーザーが入力したデータを使用してデータベースを更新する必要があります(データベースを更新する必要があります)。しかし、もう一度 - 日付は文字列で空ですので、 "MinValue"、最初に次に別の三項演算子を割り当てて、 "MinValue"に対して各日付をテストし、日付またはDBNullを割り当てる必要がありました。値...
はい、私は、文字列/日付が空であるかどうかに応じて、いくつかの他のものを除いて、いくつかの日付を含む、いくつかの異なる更新文字列を思い付くことができたと思います...将来のバグにつながるだけなので、私は一連の三項演算子を保持していると思います。
ので、編集処理を開始するためのコードは次のようになります、正直なところ、すべてこの変換を
Dim _date1 As Date
' see if we can convert the various dates...
Try
' see if empty…
If ((CType((row.Cells(19).Controls(0)), TextBox)).Text).Length < 2 Then
_date1 = DateTime.MinValue
Else
_date1 = DateTime.Parse((CType((row.Cells(19).Controls(0)), TextBox)).Text)
End If
Catch ex As Exception
ErrFlag = True
ScriptManager.RegisterStartupScript(Me, Page.GetType, "Script", "alert(‘Date1 Date is not valid - enter as MM/DD/YYYY');", True)
End Try
.
.
.
Dim sql As String = "UPDATE [foo_bar].[dbo].[bar_foo] set [email protected], …….)
cmd.Parameters.AddWithValue("@Date1", If(_date1 = DateTime.MinValue, DBNull.Value, _date1))
:データベースを更新するために戻ってGridViewのデータを取得する
今While sdr.Read
Dim _date1 As Date = If(IsDBNull(sdr("date1")), DateTime.MinValue, sdr("date1"))
.
.
.
‘ Now add them to a List of my Class:
appsList.Add(New AppClass(… _
If(_date1 = DateTime.MinValue, " ", _date1.ToString("MM/dd/yyyy")), _
…)
をいくつかの時点でバグやエラーにつながるようだ。
これはこれを処理するための「最良の」方法ですか?よりクリーンな方法はありませんか?
あなたが追加する必要があり、私はあなたのコメントを理解し、適切な技術タグ(Winformsの、Webフォーム、WPF)など – Plutonix
のではなく、ただ一つの技術に非常に特定のそれを放置しないだろう。このうちのいくつかは、グリッドビューだけでなく、DBに日付を戻すことも扱っています。 – TDU
残念ながら、これは月曜日に割り当てられたプロジェクトの1つで、VB.Netで実行する必要があります(VB 2/3日以降にVBを使用していないと言っても、最後に使用したVSは約同じ時代)。だから、月曜に私は割り当てられました、水曜日の半ばに、私は次の週の終わりまで持っていると言われます。私は、木曜日中旬に、次の水曜日まで(週末ではなく)私が持っていることを知らされています。木曜日遅く、翌日仕事の終わりまでにやる必要があると言われています。だから、私は「負の」時間で働いていて、私が持っていた時にできることをしました。 「より良い方法」があるかどうかわかります。 – TDU