2014-02-14 3 views
1

У меня есть массив «MyArray» и хочу, чтобы этот массив добавлялся к datatable в позиции spcified. Вторая последняя строка показывает, где я хочу назначить itemarray как в позиции 3 строки Вперед. Тот же процесс, который я сделал для одной строки, такой как datarow.insertAt [i], работает нормально, но когда я вставляю кучу массива в определенном месте, тогда он не работает.Как добавить ItemArray в DataRow в определенном месте в DataTable

string[] MyArray= new string[3]; 
     MyArray[0] = "Tom"; 
     MyArray[1] = "Canada"; 
     MyArray[2] = "+42-54948354-9";    
DataTable table = new DataTable(); 
       table.Columns.Add("Name"); 
       table.Columns.Add("Address"); 
       table.Columns.Add("CellNo");       
       DataRow drow; 
       drow = table.NewRow(); 
       drow.ItemArray[2] = MyArray; //Here I want to Add Array to DataRow at position 3 rows forward. 
       table.Rows.Add(drow);   

ответ

2
string[] MyArray= new string[3]; 
     MyArray[0] = "Tom"; 
     MyArray[1] = "Canada"; 
     MyArray[2] = "+42-54948354-9";    
DataTable table = new DataTable(); 
       table.Columns.Add("Name"); 
       table.Columns.Add("Address"); 
       table.Columns.Add("CellNo");       
       DataRow drow; 
       drow = table.NewRow(); 
       drow.ItemArray = MyArray; 
       table.Rows.Add(drow); 

Чтобы добавить строку в определенном индексе можно использовать InsertAt Но если нет строки в таблице, то вы не можете вставить его в положении 2 (индекс 1), потому что нет строки в позиции 1 например, после будет работать:

string[] MyArray = new string[3]; 
     MyArray[0] = "Tom"; 
     MyArray[1] = "Canada"; 
     MyArray[2] = "+42-54948354-9"; 
     DataTable table = new DataTable(); 
     table.Columns.Add("Name"); 
     table.Columns.Add("Address"); 
     table.Columns.Add("CellNo"); 
     for (int j = 0; j < 2; j++) 
     { 
      DataRow drow; 
      drow = table.NewRow(); 
      drow.ItemArray = MyArray; 
      table.Rows.InsertAt(drow, j); 
     } 

Edit 2:

string[] MyArray = new string[3]; 
     MyArray[0] = "Tom"; 
     MyArray[1] = "Canada"; 
     MyArray[2] = "+42-54948354-9"; 
     DataTable table = new DataTable(); 
     //table.Columns.Add("Name"); 
     //table.Columns.Add("Address"); 
     //table.Columns.Add("CellNo"); 
     DataRow drow; 
     drow = table.NewRow(); 
     for (int j = 0; j < 2; j++) 
     { 
      table.Columns.Add(j.ToString()); 
      string s = string.Join(" ", MyArray); 
      drow[j.ToString()] = s; 
     } 
     table.Rows.Add(drow); 
+0

Да, вы правы, я протестировал это, но если я хочу добавить массив в определенном месте, то что бы я сделал. как дроу.ItemArray [i]. i - местоположение на основе индекса –

+0

См. мое редактирование. Его расположение таблицы не строки. Если в таблице нет строки, какой бы индекс вы ни указали, она будет добавлена ​​в позицию 1. – Kashif

+0

его работала, но добавила новый массив в позиции J row wise означает сверху вниз, но я хочу добавить это в Postion j collums разумным способом слева направо. на позиции j от первого коллаборатория –

0
string[] MyArray= new string[3]; 
     MyArray[0] = "Tom"; 
     MyArray[1] = "Canada"; 
     MyArray[2] = "+42-54948354-9";    
DataTable table = new DataTable(); 
      table.Columns.Add("Name"); 
      table.Columns.Add("Address"); 
      table.Columns.Add("CellNo");       
      DataRow drow; 
      drow = table.NewRow(); 
      drow.ItemArray = string.Join(",", arr); 
      table.Rows.Add(drow); 
+0

Пожалуйста, прочитайте этот вопрос, который я написал в разделе Подробно. Мне нужно, как это, пожалуйста, помогите, если вы можете это сделать, этот метод поможет многим другим, если они будут решены. потому что я потратил много дней, чтобы прочитать все данные из файлов excel со всех листов. http: //stackoverflow.com/questions/21779543/how-to-retrun-a-single-datatable-from-all-excell-sheet-using- Interop-первенствует-Libra –

0
public System.Data.DataTable SetOne(string ExcelFilePath) 
{  
     System.Data.DataTable table = new System.Data.DataTable(); 
     Microsoft.Office.Interop.Excel.Application app = new        Microsoft.Office.Interop.Excel.Application(); 
    Microsoft.Office.Interop.Excel.Workbook wb = app.Workbooks.Open(ExcelFilePath, 
     Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
      Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
      Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
      Type.Missing, Type.Missing); 
      int NoOfSheetRows=0; 
    foreach (Worksheet item in app.Worksheets) 
    { 
     string sheetname = item.Name; 
     Worksheet sheet = (Worksheet)wb.Sheets[sheetname]; 

     Range excelRange = sheet.UsedRange; 
     string fileRange = sheet.UsedRange.Address; 
     string filecolums = fileRange.Substring(6, 1); 
     List<string> str = new List<string>(); 
     int cntr = 0; 

     foreach (Microsoft.Office.Interop.Excel.Range row in excelRange.Rows) 
     { 
      int rowNumber = row.Row; 
      string[] A4D4 = this.GetRange("A" + rowNumber + ":" + filecolums + "" + rowNumber + "", sheet); 

      if (rowNumber.Equals(1)) 
      { 
       foreach (var itm in A4D4) 
       { 
        if (table.Columns.Contains(itm)==false) 
        { 
         table.Columns.Add(itm); 
         str.Add(itm); 
         cntr++; 
        } 
        else 
        { 
         table.Columns.Add(itm + ".."); 
         str.Add(itm); 
         cntr++; 
        } 
       } 
      } 
      else 
      { 
       DataRow drow; 
       drow = table.NewRow(); 
       drow.ItemArray = A4D4; 
       for(int i=0;i<A4D4.Length; i++) 
       { 
        drow= table.NewRow(); 
        drow["name"] = A4D4[i]; 
        table.Rows.Add(drow); 
       } 
       //table.Rows.InsertAt(drow, NoOfSheetRows); 
       //table.Rows.Add(drow); // This is Area where the Problem is created the the sheet 2,3,4 and so forth data is inserted to 1st Sheet Columns 
      } 
     } 
     NoOfSheetRows += cntr; 
    } 
    return table; 
} 

public string[] GetRange(string range, Worksheet excelWorksheet) 
{ 
    Microsoft.Office.Interop.Excel.Range workingRangeCells = 
     excelWorksheet.get_Range(range, Type.Missing); 
    System.Array array = (System.Array)workingRangeCells.Cells.Value2; 
    string[] arrayS = array.OfType<object>().Select(o => o.ToString()).ToArray(); 
    return arrayS; 
} 
Смежные вопросы