はじめまして、sipeといいます。
いま、フレキシブルグリッドを利用したソフトを作成しているのですが、データを読み込んである計算(ループ処理)させる場合に、どこまで(どの行まで)データが存在しているかを把握するためにはどんな方法があるのでしょうか。
漠然としてますが、どなたかおわかりになる方がいましたら、ご教授していただけませんでしょうか。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

いまいち状況がよくわかりませんが、


ある行までデータが埋まっているとすると、x列にデータがあるとして、


Dim i As Long

i = 0

With MSFlexGrid1
Do While (i + 1 <= .Rows - 1) And (.TextMatrix(i + 1, x) <> "")
'ここに必要な処理を記述
i = i + 1
Loop
End With


これで、1~i行までデータが入っていることが把握出来ます。
ちなみに固定行は1行(0行目)としています。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qフレキシブルグリッド(FG)・・。

フォーム上でFGの大きさをマウスで自由に操作したいのですが、それらしきプロパティがみあたりません・・。どなたかリサイズの方法教えてください。

Aベストアンサー

FGの外枠を操作したいのでしょうか?
それともセルの幅や高さを操作したいのでしょうか?
検討違いでしょうか?

セルなら簡単です(というよりプロパティがあります)
外枠だとちょっと面倒だと思います。

試しに右方向のみサイズを変更させるプログラムを作ってみました。

'**********************************
Dim FGReSizeFlg As Boolean 'True:FGのマウスボタンを押している

Private Sub Form_Load()
  FGReSizeFlg = False
End Sub

Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
  With MSFlexGrid1
    If (x > .Width - 300) Then
      FGReSizeFlg = True
    End If
  End With
End Sub

Private Sub MSFlexGrid1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
  If (FGReSizeFlg = True) Then
    MSFlexGrid1.Width = x
  End If
End Sub

Private Sub MSFlexGrid1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
  FGReSizeFlg = False
End Sub
'******************************
こんな事ですか?
(FGの右側の枠内でマウスボタンを押して右にドラッグしてみてください)

マウスポインタの処理など何もしてませんし、
左側や上側は、Top,Leftも変更しなければいけないので
更に面倒だと思います。

全然勘違いならすみません。(補足してもらえば、分かる範囲で回答します。)

FGの外枠を操作したいのでしょうか?
それともセルの幅や高さを操作したいのでしょうか?
検討違いでしょうか?

セルなら簡単です(というよりプロパティがあります)
外枠だとちょっと面倒だと思います。

試しに右方向のみサイズを変更させるプログラムを作ってみました。

'**********************************
Dim FGReSizeFlg As Boolean 'True:FGのマウスボタンを押している

Private Sub Form_Load()
  FGReSizeFlg = False
End Sub

Private Sub MSFlexGrid1_MouseDown(Button As Inte...続きを読む

Q階層フレキシブル グリッド コントロール のスクロールバーを表示しない状態でスクロールさせる方法は?

VB6.0で階層フレキシブル グリッド コントロールを
3個をそれぞれ明細部・縦計部・横計部として使用して、
スクロールを連動させて表示したいと思っています。
ただ、グリッドコントロールのそれぞれにスクロールバー
を表示させるのはあまり見栄えがよくないので、
垂直スクロールバーで、明細と横計の上下スクロール、
水平スクロールバーで、明細と縦計の左右スクロールを
制御しようと思い、
とりあえず、グリッドコントロールの
ScrollBarsプロパティーをflexScrollNoneに設定してTopRowプロパティーとLeftColプロパティーの値を
適当に設定してみたのですが、左上のセルは(1,1)
が表示されたままでした。

なんとか、うまくスクロールさせる方法はないでしょうか?

Aベストアンサー

スクロールバーを表示していないと、スクロールできないみたいです。(多分)
(ヘルプにはキーボードでの入力時の事しか書いてありませんでした。)

そこで、下記のようにしてみたらどうでしょう?

Private Sub HScroll1_Change()
  With MSHFlexGrid1(0)
    .Visible = False
    .ScrollBars = flexScrollBarHorizontal
    .LeftCol = HScroll1.Value
    .ScrollBars = flexScrollBarNone
    .Visible = True
  End With
End Sub

一部分だけですが・・・
(1)グリッドを非表示にする。(画面のちらつきが起こらないように)
(2)スクロールバーを表示する。
(3)左上のセルを変更する。
(4)スクロールバーを非表示に戻す。
(5)グリッドを表示する。

説明がなくても分かるとは思いますが念のため。
もっと、簡単な方法(設定)があったらすみません。

スクロールバーを表示していないと、スクロールできないみたいです。(多分)
(ヘルプにはキーボードでの入力時の事しか書いてありませんでした。)

そこで、下記のようにしてみたらどうでしょう?

Private Sub HScroll1_Change()
  With MSHFlexGrid1(0)
    .Visible = False
    .ScrollBars = flexScrollBarHorizontal
    .LeftCol = HScroll1.Value
    .ScrollBars = flexScrollBarNone
    .Visible = True
  End With
End Sub

一部分だけですが・・・
(1...続きを読む

Q【VB】データグリッドに読み込んだテーブルの変更を元のデータベースに反映させたい

VB歴6ヶ月です。
VBのバージョンは2005です。


mdbから読み込んだデータベースをデータグリッドビューコントロールで表示しました。

CNには接続パスが入っていてmdbとの接続は確立しています。
データグリッドビューコントロールのオブジェクト名はDGVです。
読み込むテーブル名はt社員マスターです。

Private sub メンテナンス()

Dim DS As DataSet = New DataSet("社員マスター")
Dim SQL As String = "SELECT * FROM t社員マスター"
Dim DA As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(SQL, CN)

DA.Fill(DS, "社員マスター")

Dim DV As DataView = New DataView(DS.Tables("社員マスター"))

DGV.DataSource = DV

End sub

これでグリッドに読み込ますことはできたのですが、
読み込んだデータをグリッド上で変更したら元のデータベースにも反映したいのですが
やり方がわかりません ><

具体的なコード、やり方を教えていただけたらありがたいです。

VB歴6ヶ月です。
VBのバージョンは2005です。


mdbから読み込んだデータベースをデータグリッドビューコントロールで表示しました。

CNには接続パスが入っていてmdbとの接続は確立しています。
データグリッドビューコントロールのオブジェクト名はDGVです。
読み込むテーブル名はt社員マスターです。

Private sub メンテナンス()

Dim DS As DataSet = New DataSet("社員マスター")
Dim SQL As String = "SELECT * FROM t社員マスター"
Dim DA As OleDb.OleDbDataAdapt...続きを読む

Aベストアンサー

こんにちは。

CommandBuilderを発行しておけば更新が簡単です。

Dim OleCB As Data.OleDb.OleDbCommandBuilder
これを更新するタイミングでも使えるようにデーターグリッドビューのあるフォームのクラスの先頭に入れます。

OleCB = New Data.OleDb.OleDbCommandBuilder(DA)
これをPrivate sub メンテナンス()の最後に入れます。

更新するタイミング、例えばフォームを閉じる時だとするとClosingかClosedイベントに

DA.Update(DS, "社員マスター")
と入れます。

これで更新されるはずです。

どうでしょうか。

QVB2005 でtxtデータをデータグリッドビューに読み込む

VBに取り付かれて、悪戦苦闘している素人です。メモ帳に縦に並んでいる100人ほどの名前を、直接データグリッドビューに取り込むにはどうしたらよいのでしょうか。どなたかお分かりになる方、教えていただけないでしょうか。宜しくお願いいたします。

Aベストアンサー

こんな感じです

Dim filename As String = (なにやらテキストファイルのパス)
Dim dt As New System.Data.DataTable()
dt.Columns.Add("名前", Type.GetType("System.String"))

Using sr As New System.IO.StreamReader(filename, System.Text.Encoding.GetEncoding("shift-jis"))
  Do While sr.Peek() >= 0
    Dim dr As System.Data.DataRow = dt.NewRow()
    dr("名前") = sr.ReadLine()
    dt.Rows.Add(dr)
  Loop
End Using

Me.DataGridView1.DataSource = dt.DefaultView

QVB2005のデータグリッドビューとデータテーブルについて

いつもお世話になっています。
独学でVBの勉強をしているのですが、
どうしてもわからないことがあるので教えて下さい。

現在行なおうとしていることは、
mdbからデータテーブルにレコードを取得して、
それをデータグリッドビューに設定し、
値の一部をコードで変更するということです。

DataGridView1.DataSource = DataTable1

とすれば、データテーブルのデータを
データグリッドビューにて表示させることができるのですが、
コードでデータグリッドビューの値を変更すると、
データテーブルの値も一緒に変更されてしまうんです。

DataGridView1.DataSource = DataTable1.Clone

とすると、今度はレコードが表示されなくなってしまって・・・

何か良い方法がありましたら、教えて下さい。

よろしくお願いします。

Aベストアンサー

DataTable1.Cloneは テーブルの構造とキーの制約のコピーを返す物なので中身はなくなってしまいますよ

編集用のDataTableを準備してこちらをGridのDataSourceに設定してみましょう

dim dt2 as DataTable = DataTable1.Clone
dim r2 as DataRow
dim r1 as DataRow
for each r1 in DataTable1.Rows
  r2 = dt2.NewRow
  r2.ItemArray = r.ItemArray
  dt2.Rows.Add( r2 )
next
DataGridView1.DataSource = dt2
といった具合です …


このカテゴリの人気Q&Aランキング

おすすめ情報