DOBON.NET DOBON.NETプログラミング掲示板過去ログ

データセットについて

分類:[.NET]

最近のログでテキストファイルからレコードを読み込んでDATAGRIDに表示させる事について書かれてましたが、同様の処理でテキストファイルからDATAGRIDに取り込んだ後に、DATAGRIDでデータ変更があった場合、再度テキストファイルに更新をかける事は可能なのでしょうか?
■No1260に返信(小鳥さんの記事)
> 最近のログでテキストファイルからレコードを読み込んでDATAGRIDに表示させる事について書かれてましたが、同様の処理でテキストファイルからDATAGRIDに取り込んだ後に、DATAGRIDでデータ変更があった場合、再度テキストファイルに更新をかける事は可能なのでしょうか?

fukuです。
こんな感じでどうでしょうか?
ただ、DataGridへのDataSource設定方法で行数の取り方は変わります。

        Dim myFileStream As FileStream
        Dim myStreamWriter As StreamWriter
        Dim intIndex As Integer
        Dim strWriteLine As String

        '行数を取得
        Dim intCount As Integer = DataGrid1.BindingContext(DataGrid1.DataSource, DataGrid1.DataMember).Count

        myFileStream = New FileStream("C:\temp\test.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite)
        myStreamWriter = New StreamWriter(myFileStream)

        '1行づつ読み込んでCSV形式で書き込む 2列の場合です
        For intIndex = 0 To intCount - 1 Step 1
            strWriteLine = Me.DataGrid1.Item(intIndex, 0)
            strWriteLine = strWriteLine & "," & Me.DataGrid1.Item(intIndex, 1)
            myStreamWriter.WriteLine(strWriteLine)
        Next intIndex

        myStreamWriter.Close()

以上です。
> fukuです。
> こんな感じでどうでしょうか?
> ただ、DataGridへのDataSource設定方法で行数の取り方は変わります。
>
> Dim myFileStream As FileStream
> Dim myStreamWriter As StreamWriter
> Dim intIndex As Integer
> Dim strWriteLine As String
>
> '行数を取得
> Dim intCount As Integer = DataGrid1.BindingContext(DataGrid1.DataSource, DataGrid1.DataMember).Count
>
> myFileStream = New FileStream("C:\temp\test.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite)
> myStreamWriter = New StreamWriter(myFileStream)
>
> '1行づつ読み込んでCSV形式で書き込む 2列の場合です
> For intIndex = 0 To intCount - 1 Step 1
> strWriteLine = Me.DataGrid1.Item(intIndex, 0)
> strWriteLine = strWriteLine & "," & Me.DataGrid1.Item(intIndex, 1)
> myStreamWriter.WriteLine(strWriteLine)
> Next intIndex
>
> myStreamWriter.Close()
>
> 以上です。
お返事ありがとうございます。
教えていただいた仕様は全件更新になるのでしょうか?

勝手なのですが、私のイメージしているのは、
Datagridで値を変換したタイミングでそのセルのみ更新がかかる。
という感じなのですが。

できるできないもわからずに勝手申しあげてすいません。
ちなみにDatasourceはDATAVIEWを仕様してみました。
> お返事ありがとうございます。
> 教えていただいた仕様は全件更新になるのでしょうか?
>
> 勝手なのですが、私のイメージしているのは、
> Datagridで値を変換したタイミングでそのセルのみ更新がかかる。
> という感じなのですが。
>
> できるできないもわからずに勝手申しあげてすいません。

fukuです。自分のサンプルは、DataGridの内容を全てカンマ区切りで
テキストファイルに書き込む処理です。
テキストファイルへの更新であればリアルタイムにDataGridの変更を
書き込む必要はなく、例えば、保存ボタンのクリックイベントやFormの
閉じるClosingイベントで一括で上書きしてしまえば良いのかなっていう
感じでした。

テキストの場合、Seekで行をもってはこれるかと思うのですが、
変更の度にやるとなるとDataGridのイベントをとったり、常に
DataGridとテキストファイルの内容を一致させないといけないと
思いますので、難しく複雑でトリッキーなロジックになるかも
しれませんね。
■No1271に返信(小鳥さんの記事)
> ちなみにDatasourceはDATAVIEWを仕様してみました。

fukuです。
DataViewの場合は、以下の方法で行数を取れますよ。
Dim myDataView As DataView
Dim intRecCnt As Integer = 0
myDataView = CType(Me.DataGrid1.DataSource, DataView)
intRecCnt = myDataView.Count

DOBON.NET | プログラミング道 | プログラミング掲示板