2012-04-18 3 views
4

테이블에 세 개의 헤더를 수동으로 추가하려고합니다. 이 테이블은 SqlDataReader의 데이터로 잘 채 웁니다. 그러나 첫 번째 행을 고칠 때 문제가 있습니다.마지막 셀만 행에 추가됩니다.

 TableRow iRow = new TableRow(); 
     TableCell iCell = new TableCell(); 
     iCell.Text = "SUBMITTED BY"; 
     iRow.Cells.Add(iCell); 
     iCell.Text = "ON"; 
     iRow.Cells.Add(iCell); 
     iCell.Text = "ISSUE DESCRIPTION"; 
     iRow.Cells.Add(iCell); 
     table.Rows.Add(iRow); 

은 마지막 항목 (이 경우, 문제 설명) 만 테이블에 표시합니다. 해결 방법을 찾았습니다.

 TableRow iRow = new TableRow(); 
     TableCell iCell = new TableCell(); 
     TableCell iCell2 = new TableCell(); 
     TableCell iCell3 = new TableCell(); 
     iCell.Text = "SUBMITTED BY"; 
     iRow.Cells.Add(iCell); 
     iCell2.Text = "ON"; 
     iRow.Cells.Add(iCell2); 
     iCell3.Text = "ISSUE DESCRIPTION"; 
     iRow.Cells.Add(iCell3); 
     table.Rows.Add(iRow); 

하지만 다소 귀찮습니다. 내 논리에 문제가 있습니까? 아니면 C#에서 누락 된 부분이 있습니까? C에서 꽤 좋은 핸들을 얻었지만 C#을 몇 주 전에 시작했습니다.

감사합니다.

답변

11

그래, 그것 같이 소리 나는 C#

을에서 누락 뭔가가있다.

이 :

TableCell iCell = new TableCell(); 

TableCell 객체를 생성하고, iCell 변수에 대한 참조에 할당한다. iCell의 값은 이며 개체에 대한 참조는 단지입니다. 그것은 대상 자체가 아닙니다. 이 :

iRow.Cells.Add(iCell); 

패스 Add 참조하여 그 방법을. 그것은 Add에 개체를 전달하지 않습니다 - 당신은 결코 그걸 C#에서 할 수 있습니다. 그들은 같은 객체를 변경하고 같은

iCell.Text = "ON"; 

그냥 서로를 덮어 : 그래서 당신의 행은 같은 셀에 대한 참조를 많이하고,이 같은 라인에서 변경 한 모든 변경 사항에 끝납니다.

당신은 도움이 기사를 찾을 수 있습니다 :

TableRow row = new TableRow { 
    Cells = { 
     new TableCell { Text = "SUBMITTED BY" }, 
     new TableCell { Text = "ON" }, 
     new TableCell { Text = "ISSUE DESCRIPTION" }, 
    } 
}; 
:

는 개인적으로 초기화를 수집 이니셜 라이저를 사용하여 객체에 코드를 변경 것

6

매번 iCell을 다시 생성해야합니다. 그렇지 않으면 동일한 인스턴스를 반복하여 반복하여 텍스트를 변경하는 것입니다. 두 인스턴스가 모두 동일한 인스턴스이므로 작업을 인식하고 다시 추가하지 않으므로 코드 끝의 행에 사실상 하나의 셀만 있습니다. 즉 iCell의 단일 인스턴스입니다. 당신은 당신의 코드를 조금 청소기를 확인하려면, 당신은 텍스트에 주어진 매개 변수를 사용하여 새로운 셀 인스턴스를 반환하는 도우미 메서드를 만들 수

TableRow iRow = new TableRow(); 
TableCell iCell = new TableCell(); 
iCell.Text = "SUBMITTED BY"; 
iRow.Cells.Add(iCell); 
iCell = new TableCell(); // create new cell 
iCell.Text = "ON"; 
iRow.Cells.Add(iCell); 
iCell = new TableCell(); // create new cell 
iCell.Text = "ISSUE DESCRIPTION"; 
iRow.Cells.Add(iCell); 
table.Rows.Add(iRow); 

: 여기

는 제대로 작동합니다 예입니다 :

public TableCell CreateCell(string text) { 
    TableCell iCell = new TableCell(); 
    iCell.Text = text; 
    return iCell; 
} 

그런 다음 코드는 다음과 같이 단순화 될 수있다 :

TableRow iRow = new TableRow(); 
iRow.Cells.Add(CreateCell("SUBMITTED BY")); 
iRow.Cells.Add(CreateCell("ON")); 
iRow.Cells.Add(CreateCell("ISSUE DESCRIPTION")); 
table.Rows.Add(iRow); 
관련 문제