2013-03-27 4 views
0

У меня есть программа, которая автоматически генерирует 2D-сетку кнопок и сохраняет сетку во вложенном списке, и я пытаюсь экспортировать этот список в MS Excel. однако код, который я пытаюсь сделать, вызывает множество ошибок. Я могу получить эту работу без использования списка, но мне нужно использовать вложенный список, чтобы очистить список, заполнив его снова, если и когда размер сетки увеличивается или уменьшается. Есть логика, что я использую даже выполнимоЭкспорт вложенных элементов списка

Как следует:

 //This is not the complete code 
     List<List<Button>> buttonss = new List<List<Button>>(); 
     List<Button> rowList = new List<Button>(); 

     //Some method that creates a grid of buttons 
     buttons = new Button[row][]; 
     for (int r = 0; r < row; r++) 
     { 
      buttons[r] = new Button[col]; 
      buttonss.Add(rowList);  
      for (int c = 0; c < col; c++) 
      { 
       buttons[r][c] = new Button(); 
       rowList.Add(buttons[r][c]); 
      } 
     } 

Следующая вещь, которую я хочу сделать, это Ot экспортировать этот список в Excel.

Сетка: enter image description here

Кнопка:

//Export to MS Excel button 
private void btnExport_Click(object sender, EventArgs e) 
{ 
    ep.Do("sheet.xsl", rowList);//(ERROR 0) 
} 

Класс:

//Export class 
public void Do(string excelName, System.Collections.Generic.List<Button[][]> Grid) 
{ 
    for (int i = 0; i <= Grid.Count(); i++) 
    { 
     for (int j = 0; j <= Grid[i].Count(); j++) 
     { 

      AddData(i, j, Grid[i][j]);//(ERROR HERE [1]) 

     } 
    } 
    //app.SaveWorkspace(excelName); 
} 

public void AddData(int row, int col, System.Collections.Generic.List<Button[][]> button) 
{ 
    if (button == null) return; 
    row++; 
    col++; 

    Range range = worksheet.Cells[row + 2, col + 2]; 
    if (!defaultBackgroundIsWhite) 
    { 
     range.Interior.Color = button.BackColor.ToArgb();//(ERROR HERE[2]) 
    } 
    else 
     range.Interior.Color = button.BackColor.Name != "Control" ? button.BackColor.ToArgb() : System.Drawing.Color.White.ToArgb();//(ERROR HERE) 
    // range.NumberFormat = ""; 
    worksheet.Cells[row + 2, col + 2] = button.Text;//(ERROR HERE[3]) 
    row--; 
    col--; 
} 

Ошибки: 0: Аргумент 2: не может конвертировать из «System.Collections.Generic.List 'to' System.Collections.Generic.List 'C: ..

1: Лучший перегружен матч метод 'SmartRota.ExportHeadWaiter.AddData (междунар, INT, System.Collections.Generic.List)' имеет некоторые недопустимые аргументы C: ..

2: Ошибка 3 «System.Collections .Generic.List 'не содержит определения для «BackColor» и не может быть найден метод расширения «BackColor», принимающий первый аргумент типа «System.Collections.Generic.List» (вам не хватает директивы using или ссылки на сборку ?) C: ..

3: то же самое, что и выше eroor

ответ

2

Ну есть немало проблем с вашим кодом, в основном Type параметров ваши функции получают.

Например, 1. rowList является List<Button> и вы передаете его функции Do() пока функция Do ожидает List<Button[][]>

2. Чтобы усугубить ситуацию, AddData ожидает получить массив кнопок, но весь код внутри AddData считает, что у вас есть только одна кнопка и не массив.

3. Вызов ToArgb() возвращения как межды, пока вы пытаетесь положить его в Color

Не пытаясь понять, действительно какой вы пытаетесь сделать, я предполагаю, что это, как вы хотите, чтобы объявить свои функции:

public void Do(string excelName, System.Collections.Generic.List<Button[]> Grid) 

и:

public void AddData(int row, int col, Button button) 
+0

Любая идея, как я могу разобраться в этом – Tacit

+0

Ну начнем правильно объявить параметры ваших функций.Затем попытайтесь понять, почему вы пытаетесь передать «Список

+0

Я исправил это, но сказал, что AddData (i, j, hwGrid [i] [j]); и ep.Do ("sheet.xsl", rowList); имеет некоторые недопустимые аргументы – Tacit

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