2014-09-23 4 views
1

Я думаю, что я делаю здесь что-то ужасно. У меня есть объект внутри импорта, называемый oCultivationPlan. Он содержит данные, очевидно. И я хочу создать таблицу, в которой отображаются данные внутри нее. Тем не менее, я хочу, чтобы из этого объекта были выбраны только некоторые из них, а не все данные. Есть ли способ сделать это короче? Я думал об использовании foreach или for, но это зацикливало бы все данные внутри объекта:/while я хочу только выбранных.Как сделать эту таблицу короче?

  TableRow tblRow = new TableRow(); 

      TableCell tblc = new TableCell(); 
      tblc.Controls.Add(new LiteralControl("ID")); 
      TableCell tblc2 = new TableCell(); 
      tblc2.Controls.Add(new LiteralControl(import.oCultivationPlan.iID.ToString())); 

      tblRow.Controls.Add(tblc); 
      tblRow.Controls.Add(tblc2); 

      tblImportPreview.Controls.Add(tblRow); 

      TableCell tblc3 = new TableCell(); 
      TableCell tblc4 = new TableCell(); 
      tblc3.Controls.Add(new LiteralControl("Description")); 
      tblc4.Controls.Add(new LiteralControl(import.oCultivationPlan.sDescription.ToString())); 

      TableRow tblRow2 = new TableRow(); 
      tblRow2.Controls.Add(tblc3); 
      tblRow2.Controls.Add(tblc4); 

      tblImportPreview.Controls.Add(tblRow2); 

      TableCell tblc5 = new TableCell(); 
      TableCell tblc6 = new TableCell(); 
      tblc5.Controls.Add(new LiteralControl("DateCreated")); 
      tblc6.Controls.Add(new LiteralControl(import.oCultivationPlan.dDateCreated.ToString())); 

      TableRow tblRow3 = new TableRow(); 
      tblRow3.Controls.Add(tblc5); 
      tblRow3.Controls.Add(tblc6); 

      tblImportPreview.Controls.Add(tblRow3); 
+1

Было бы лучше в [CodeReview.SE]? –

+0

Почему бы не отфильтровать список прежде, чем построить таблицу, если вы хотите выбрать несколько строк. Например, используйте простой linq, который возвращает ваш отфильтрованный список или почему бы не фильтровать список до того, как вы начнете процесс построения таблицы. (Предполагая, что вы знаете, что вы фильтруете до создания таблицы) –

+0

Ну, дело. У меня есть файл экспорта со списком данных в нем. И ALLLL данные попадают в класс под названием «импортер». Этот класс импортера содержит списки и объекты. oCultivationPlan - один из объектов. Я не могу отфильтровать этот объект, потому что его все еще нужно импортировать и сохранить в базе данных. НО Я мог бы создать новый класс с информацией, которую я хочу, и создать таблицу из нее. Это было бы возможно, но нет ли лучшего варианта? –

ответ

0

не foreach :), но вы можете использовать цикл for, чтобы получить его. вы должны иметь возможность использовать приведенный ниже код в качестве решения для своего вопроса :) его меньшая цель цикла, но он делает то же самое, что и вы. Я использую строковый массив, чтобы сохранить всю информацию, которую вы хотите получить внутри таблицы, чтобы у нее было что-то, что можно было бы выходить после нее. Для каждой строки у вас есть 2 новых клетки в нем, и вот почему мы имеем ряд * 2, так что клетки могут заполняются :)

Надеются, что это работает для вас, и что вы можете использовать решение :)

 int _row = 1; 
     int _cell = 0; 
     string[] arr = new string[6] { "ID", import.oCultivationPlan.iID.ToString(), "Description", import.oCultivationPlan.sDescription.ToString(), "DateCreated", import.oCultivationPlan.dDateCreated.ToString() }; 
     for (; _row <= 3; _row++) 
     { 
      TableRow tblRow = new TableRow(); 
      for (; _cell < _row * 2; _cell++) 
      { 
       TableCell tblc = new TableCell(); 
       tblc.Controls.Add(new LiteralControl(arr[_cell])); 
       tblRow.Controls.Add(tblc); 
      } 

      tblImportPreview.Controls.Add(tblRow); 
     } 
+0

Yess это работает. Спасибо alot Это то, что я искал. : DU - спасатель жизни, D –

+0

не проблема :) Я просто прочитал то, что вы написали, и хотя это не должно быть сложно: D – BlackStarHH

+0

не забудьте поставить вопрос, ответив путем ответа: – BlackStarHH

0

Я хотел бы создать сильный набранный класс

public Class ImportDto 
{ 
    public string RowIdentifier {get; set;} 
    public string RowValue {get; set; 
} 

Тогда, как сказал Дэвид, написать функцию фильтра для фильтрации данных от импорта класса и сопоставляет его ImportValues ​​

public List<ImportDto> FilterImportedData(Import import) 
{ 
    var importDto = new List<ImportDto> 
    { 
     new ImportDto { RowIdentifier ="ID", RowValue = import.oCultivationPlan.iID.ToString()}, 
     new ImportDto { RowIdentifier ="Description", RowValue = import.oCultivationPlan.sDescription.ToString()} 
    }; 
} 

Тогда в классе aspx.cs, просто проходным List<ImportDto> и создать LiteralControls

foreach(var dto in importDtos) 
{ 
var row = new TableRow(); 

var identifierCell = new TableCell(); 
var valueCell = new TableCell(); 

identifierCell.Controls.Add(new LiteralControl(dto.RowIdentifier)); 
valueCell.Controls.Add(new LiteralControl(dto.RowValue)); 

row.Add(identifierCell); 
row.Add(valueCell); 

tblImportPreview.Controls.Add(row); 
} 

Таким образом, все, что вам нужно сделать в будущем, чтобы добавить новые отфильтрованные данные, чтобы изменить вашу функцию отображения и добавить новый ImportDto, и он будет автоматически отображаться в интерфейсе.

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