- 締切済み
VB.net 重複チェックがしたいです
DB接続しない前提です。 データセットを用いてグリッドビュー内で重複チェックをしたいです。 リストボックス内にファイル毎にテキストを取り込み、任意の日付を抽出しテーブルに登録。 テーブルに重複あるか確認してboolenで判定したいのですが、構文がエラーになります。 For i = 0 To ListBox1.Items.Count - 1 ST = ListBox1.Items.Item(i) GT = GetText(ST) Dim strSearchChardate As String = "Date " Dim datetxt As String = GT.Substring(lngPointdate + 5, 10) Dim dsdt = DataSet1.DataTable1 Dim checktxt As DateTime = DateTime.Parse(datetxt) Dim check As Boolean = dsdt.Contains(datetxt) ←ここのdatetxtエラー ’グリッドビューに重複なければ書き込み dsdt.AddDataTable1Row(datetxt, code) という風に進めたいのですが、修正を含め違うやり方等ありましたら教えていただきたいです。 現在はエラー処理でしておりますがこれをやめたいです。 '日付の重複処理 Try dsdt.AddDataTable1Row(datetxt, code) '日付をユニークキーにしているため Catch ex As System.Data.ConstraintException MsgBox("同一日付があります") End Try よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- wormhole
- ベストアンサー率28% (1626/5665)
>Dim check As Boolean = dsdt.Contains(datetxt) ←ここのdatetxtエラー dsdt.Containsメソッドは dsdt.Contains(value As DataSet1.DataTableRow) As Boolean dsdt.Contains(value As DataSet1.DataTableRow, comparer As IEqualityComparer(Of DataSet1.DataTableRow)) As Boolean の2つがおそらくあると思います。 引数としてStringを要求するものはありませんからエラーになるのは当然かと(構文エラーではありませんが) 具体的なコードは書けませんが dsdt.Contains(value As DataSet1.DataTableRow) As Boolean は行データの全一致(質問では日付とコード)が条件でしょうから使えず dsdt.Contains(value As DataSet1.DataTableRow, comparer As IEqualityComparer(Of DataSet1.DataTableRow)) As Boolean を使う事になるかとと思います。 具体的なコードは書けませんが(質問に書かれている内容では分からない型や名前等ありますし) 第2引数の比較用クラスを定義しておいて Imports System.Collections.Generic Class DataComparer Implements IEqualityComparer(Of DataSet1.DataTable1Row) Private Function IEqualityComparer_Equals(x As DataSet1.DataTable1Row, y As DataSet1.DataTable1Row) As Boolean Implements IEqualityComparer(Of DataSet1.DataTable1Row).Equals Return x.日付 = y.日付 End Function Private Function IEqualityComparer_GetHashCode(obj As DataSet1.DataTable1Row) As Integer Implements IEqualityComparer(Of DataSet1.DataTable1Row).GetHashCode Return obj.日付.GetHashCode() End Function End Class Dim row As DataSet1.DataTable1Row = Me.DataSet1.NewDataTable1Row() row.日付 = datetxt row.コード = コード If Not dsdt.Contains(row, New DataComparer()) Then dsdt.AddDataTable1Row(row) End If とか。 もしくはdsdtから1行づつ調べてまわるとか。 になるんじゃないでしょうか。
- imogasi
- ベストアンサー率27% (4737/17069)
Dictionaryの仕組を使ってはどうですか。 http://www.wednesdaymoon.net/kzweb/articles/vbnet/article.aspx?articleid=38 Dictionaryの使い方 https://www.dotnetperls.com/dictionary-vbnet ーー If dictionary.ContainsKey("xx") Then 同一キーあり 日付は文字列にしておく必要があるかも。
補足
配列にしていないので、できませんでした><