2016-12-15 3 views
0

Я пытаюсь построить datagridview, которые состоят из двух частей: одна часть поступает из базы данных, а другая часть собирает информацию о файлах на локальном жестком диске и показывает ее как одну часть, но я получать сообщение об ошибке, что говоритДобавление строки в связанный datagridview из базы данных oracle

ряды не может быть программно добавлены в DataGridView строк коллекции, когда элемент управления с привязкой к данным

Примечание: зная, что данные в datagridview будут использоваться в дальнейшем для модифицирует данные по базе данных оракула

Я имел загрузить Imag для более понимания первых двух столбцов, из базы данных

private void ListFileToBePatched() 
{ 
    try 
    { 
     string connstr = "data source=orcl;user id=user;password=pwd"; 
     string cmdstr = @"SELECT OFFICE_CODE as ""Office Code"", 
           IP_ADDRESS as ""Office IP"" 
          FROM table"; 

     string[] array = Directory.GetFiles(SBankfilespath, "*.txt"); 

     using (OracleConnection conn = new OracleConnection(connstr)) 
     using (OracleCommand cmd = new OracleCommand(cmdstr, conn)) 
     { 
      conn.Open(); 
      OracleTransaction trans = conn.BeginTransaction(); 

      OracleDataReader OraReader = cmd.ExecuteReader(); 

      DataTable dt = new DataTable(); 

      DataColumn OfficeCodecolumn = new DataColumn(); 
      OfficeCodecolumn.DataType = System.Type.GetType("System.String"); 
      OfficeCodecolumn.ColumnName = "Office Code"; 
      dt.Columns.Add(OfficeCodecolumn); 

      DataColumn OfficeIPcolumn = new DataColumn(); 
      OfficeIPcolumn.DataType = System.Type.GetType("System.String"); 
      OfficeIPcolumn.ColumnName = "Office IP Address"; 
      dt.Columns.Add(OfficeIPcolumn); 

      DataColumn FileNamecolumn = new DataColumn(); 
      FileNamecolumn.DataType = System.Type.GetType("System.String"); 
      FileNamecolumn.ColumnName = "File Name"; 
      dt.Columns.Add(FileNamecolumn); 

      DataColumn FullFilePathcolumn = new DataColumn(); 
      FullFilePathcolumn.DataType = System.Type.GetType("System.String"); 
      FullFilePathcolumn.ColumnName = "Full File Path"; 
      dt.Columns.Add(FullFilePathcolumn); 

      DataColumn DateCreatedcolumn = new DataColumn(); 
      DateCreatedcolumn.DataType = System.Type.GetType("System.String"); 
      DateCreatedcolumn.ColumnName = "Date Created"; 
      dt.Columns.Add(DateCreatedcolumn); 

      DataColumn Datemodifiedcolumn = new DataColumn(); 
      Datemodifiedcolumn.DataType = System.Type.GetType("System.String"); 
      Datemodifiedcolumn.ColumnName = "Date modified"; 
      dt.Columns.Add(Datemodifiedcolumn); 

      foreach (string FullFilePath in array) 
      { 
       DataRow row = dt.NewRow(); 

       row[2] = Path.GetFileName(FullFilePath); 
       row[3] = FullFilePath; 
       row[4] = File.GetCreationTime(FullFilePath); 
       row[5] = File.GetLastWriteTime(FullFilePath); 

       dt.Rows.Add(row); 
      } 

      dt.Load(OraReader); 
      DataView view = new DataView(dt); 
      DGV_PatchStatus.DataSource = view; 
     } 
     FileCount.Text = "File Count (" + DGV_PatchStatus.Rows.Count.ToString() + ")"; 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

enter image description here

+0

добавить строку в свой «DataTable» и связать ее снова –

ответ

0

Make класса для вашего данные после чтения из db присваивают данные этому объекту и помещают объект в список после инициализации DGV_PatchStatus.DataSource в этот список, когда вам нужно добавить новую строку, просто добавьте объект данных в этот список и повторно инициализируйте DGV_PatchStatus DataSource

+0

Пожалуйста, можете ли вы привести пример? – sam

1

Вы можете использовать метод DataTable.NewRow, чтобы добавить строку в ваш DataTable.

foreach (string FullFilePath in array) 
{ 
    DataRow r = DT.NewRow(); 

    r[0] = Path.GetFileName(FullFilePath); 
    r[1] = FullFilePath; 
    r[2] = File.GetCreationTime(FullFilePath); 
    r[3] = File.GetLastWriteTime(FullFilePath); 
} 

Тогда просто связать DT снова как DataSource

DGV_PatchStatus.DataSource = DT; 

EDIT в:

то, что мне действительно нужно, что для каждого офиса есть список файлов

Если у вас есть несколько файлов для каждой строки-офиса, вы должны посмотреть на это Tree-View-Tutorial, это может быть полезно для достижения желаемых результатов.

Здесь также находится Nested-DataGrid-Example, который также может быть полезен. Удачи.

+0

исключение «Не удается найти столбец 0» - это нуль, это индекс столбца datagridview? или имя, которое я ранее называл его при создании datagridview? – sam

+0

На самом деле это должен быть индекс столбца. Сколько столбцов имеет таблица данных? –

+0

имеет 6 столбцов, включая те столбцы, которые пришли из базы данных. Я пытался изменить индекс, но это не решит проблему. – sam