2015-09-28 4 views
0

У меня есть функция, которая экспортирует приложение DataGridView для Windows.Form в CSV. Он отлично работает, но проблема в том, что мой DataGridView имеет 2 строки, обновляют каждые миллисекунды, но выход в CSV не делает, он просто вывести значение после применения близко ...Экспорт DataGridview в CSV каждые миллисекунды

public void writeCSV(DataGridView gridIn, string outputFile) 
    { 
     //test to see if the DataGridView has any rows 
     if (gridIn.RowCount > 0) 
     { 
      string value = ""; 
      DataGridViewRow dr = new DataGridViewRow(); 
      StreamWriter swOut = new StreamWriter(outputFile); 

      //write header rows to csv 
      for (int i = 0; i <= gridIn.Columns.Count - 1; i++) 
      { 
       if (i > 0) 
       { 
        swOut.Write(","); 
       } 
       swOut.Write(gridIn.Columns[i].HeaderText); 
      } 

      swOut.WriteLine(); 

      //write DataGridView rows to csv 
      for (int j = 0; j <= gridIn.Rows.Count - 1; j++) 
      { 
       if (j > 0) 
       { 
        swOut.WriteLine(); 
       } 

       dr = gridIn.Rows[j]; 

       for (int i = 0; i <= gridIn.Columns.Count - 1; i++) 
       { 
        if (i > 0) 
        { 
         swOut.Write(","); 
        } 

        value = dr.Cells[i].Value.ToString(); 
        //replace comma's with spaces 
        value = value.Replace(',', ' '); 
        //replace embedded newlines with spaces 
        value = value.Replace(Environment.NewLine, " "); 

        swOut.Write(value); 
       } 
      } 
      swOut.Close(); 
     } 
    } 

я назвал функцию из функции SetDataGridView(), которую я использую для обновления строки DataGrids каждую секунду, но она по-прежнему не обновляется каждые миллисекунды, как это делает DataGrid.

Как сделать это Обновление CSV-файла каждые миллисекунды в качестве DataGridView.Rows сам обновляется?

+1

Почему бы вам обновить в сетке данных каждый миллисекунд? У вас нет экрана с частотой обновления 1000 Гц, поэтому вы сможете увидеть только часть обновлений. – Guffa

+0

Я имею в виду, что я обновляю значения строк каждые миллисекунды ... – ThisDude

ответ

0

Добавить TargetUpdated событие DataGrid:

<DataGrid TargetUpdated="DataGrid_TargetUpdated" ... 

Затем в каждом из определений столбцов DataGrid набор NotifyOnTargetUpdated = True:

<DataGridColumn Binding="{Binding Path=..., NotifyOnTargetUpdated=True, 
UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/> 

Затем в TargetUpdated методе вызов обработчика writeCSV:

private void DataGrid_TargetUpdated(object sender, DataTransferEventArgs e) 
{ 
     writeCSV(DataGridView,outputFile) 
} 
+0

Хотя сама колонка не изменяется. Но строки ... Будет ли это работать и для строк или только для изменения столбцов? – ThisDude

+0

@ThisDude Каждое изменение столбца происходит в результате изменения строки. –

+0

Хорошо, спасибо ... Но, я думаю, что что-то не хватает ни в этом коде, ни в решении, которое вы предоставили ... У меня нет определения DataGrid. Все определения, которые у меня есть, - DataGridView. – ThisDude

0

я решил ее, вызвав writeCSV(DataGridView,outputFile) из private void timer_0_Tick(object sender, EventArgs e), которые создаются автоматически каждый раз, когда таймер Класс был добавлен в C# приложение ... И началось обновление CSV каждый раз клещ обновляет DataGridView

Смежные вопросы