投稿者 魔界の仮面弁士  (社会人) 投稿日時 2017/4/10 12:26:14
> データを入力してそのデータをデータグリッドビュー内に収めた後に
> 検索機能を使って名前の検索を行えるようにしたいのですが、

DataGridView.DataSource にデータをバインドする手法でしょうか?
それとも、セル単位でデータを割り当てる手法でしょうか?

パフォーマンス上の理由により、通常は前者の利用をお奨めします。



> 例えばデータを5件ほど登録した際に、検索ボックスに何を入力しても
> 一番最後の行が選択される状態になっています。

DataGridView は、既定で MultiSelect = True になっています。
単一選択にしたいのであれば、MultiSelect = False にしておきましょう。
そうしないと、現在のカーソル行と検索結果の両方が選択状態になってしまいます。

MultiSelect = True のままで処理するのであれば、現状のコードの先頭に
DataGridView1.ClearSelection()
を追加しておいた方が良いかもしれません。



> 検索を行ってくれないということは、for文あたりのループが回っていないと
> いうことでしょうか。
ループ行の上で [F9] キーを押して、ブレークポイントを貼っておいてください。
そうすると、その行が実行される直前で一時停止されるようになります。

一時停止中に [F11]キーを押すと、一行ずつステップ実行されますので、
『ループ内を通過しているのか』とか、『その時、それぞれの変数の内容はどうなっているか』を
確認することができると思います。




以下蛇足:
> Dim resultIndex As Int32 = 0
> For i As Integer = 0 To DataGridView1.RowCount - 1
『Int32』表記と『Integer』表記が混在していますが、
どのような意図で使い分けているのでしょうか?


それと、「行番号」をあらわす変数の場合は、
i, j, k などの変数名のかわりに、
r, rowIndex, row などを使うと分かりやすくなります。
(列番号なら、c, col, column, colIndex など)

あるいは、列番号に x、行番号に y を使うケースもあります。


> Dim inputString1 As String = DataGridView1.Rows(i).Cells("namae").Value
パフォーマンス上の事情により、
『DataGridView1.Rows(i).Cells("namae").Value』ではなく
『DataGridView1("namae", i).Value』をお奨めします。
https://msdn.microsoft.com/ja-jp/library/ms171621%28vs.100%29.aspx

また、Value プロパティの戻り値は Object 型なので、いきなり String 型の変数に
代入するのではなく、両辺の型を一致させることが望ましいです。
「Option Strict On」の宣言をつけておくと、このような型の不一致を防ぐことができます。


> Dim strText As String = TextBox1.Text
TextBox の内容はループ中で変化するものではありませんので、
この部分はループの外に出してしまった方が良いでしょう。


> If hasData = True Then

値を比較した結果は Boolean になりますので、
If hasData Then
If hasData = True Then
If (hasData = True) = True Then
If ((hasData = True) = True) = True Then
はいずれも同じ結果となりますが、このケースでは
「If hasData Then」で十分かも知れません。


> ご質問失礼します。
『自分がする動作・行為』に対しては、敬語の「ご」「お」は普通付けません。

ただし謙譲語として、相手のために行う動作であれば、自分の動作であっても
「ご説明いたしますと…」のような言い方はアリですね。