2015-04-06 3 views
0

Im используя следующий код, чтобы сохранить свою DataGridView таблицу в текстовый файл:Сохранить DataGridView в CSV без изменения фокуса

Dim rows = From row As DataGridViewRow In DataGridView1.Rows.Cast(Of DataGridViewRow)() _ 
 
        Where Not row.IsNewRow _ 
 
        Select Array.ConvertAll(row.Cells.Cast(Of DataGridViewCell).ToArray, Function(c) If(c.Value IsNot Nothing, c.Value.ToString, "")) 
 
     Using sw As New IO.StreamWriter("Z:\\SchData.txt") 
 
      For Each r In rows 
 
       sw.WriteLine(String.Join(";", r)) 
 
      Next 
 
     End Using

И следующее, чтобы обновить таблицу:

While 1 = 1 
 
      Try 
 
       DataGridView1.Rows.Clear() 
 
       Using stream As System.IO.FileStream = System.IO.File.OpenRead("Z:\\SchData.txt") 
 
        Using reader As New System.IO.StreamReader(stream) 
 

 
         Dim line As String = reader.ReadLine() 
 

 
         While (line IsNot Nothing) 
 
          Dim columns = line.Split(";") 
 
          line = reader.ReadLine() 
 
          Dim index = Me.DataGridView1.Rows.Add() 
 
          Me.DataGridView1.Rows(index).SetValues(columns) 
 
         End While 
 

 
        End Using 
 
       End Using 
 
       Button107.Enabled = True 
 
       Button88.Enabled = True 
 
       updatingSch = False 
 
       Return 
 
      Catch ex As Exception 
 
       Threading.Thread.Sleep(50) 
 
      End Try 
 
     End While

Обе функции вызываются при изменении значения в таблице. Проблема заключается в том, что вместо перехода в следующую ячейку (либо когда я перехожу, либо перейду вниз, либо щелкнув другую ячейку), она быстро переключит фокус на правильную ячейку, а затем быстро переключится на верхнюю левую ячейку (строка 0, столбец 0). Как я могу остановить его от изменения фокуса?

+0

В то время как 1 = 1, я надеюсь, что тип ... – Codexer

ответ

0

Вот как остановиться в том же ряду после редактирования.

Private Sub dgv_CellEndEdit(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv.CellEndEdit 
    Dim index As Integer = dgv.FirstDisplayedScrollingRowIndex 
    'do your file work then reset the row index 
    dgv.FirstDisplayedScrollingRowIndex = index 
End Sub 
Смежные вопросы