2009-12-27 5 views
0

열의 여러 값을 표시하는 방법 I에서 각 셀윈도우 폼 : I는 상황이

Column1 Column2 Column3 
1   v1 v2 vl1 
         vl2 
         vl3 
2   v3 v4 vl4 
         vl5 
         vl6 

아래 표와 같은 값의 여러 값 쌍의리스트를 갖는 테이블 형식으로 데이터를 표시 할 Windows Forms를 사용하여 어떻게이 작업을 수행 할 수 있습니까?

도움을 주시면 대단히 감사하겠습니다.

감사 이름 : Jeez

+0

표시하기 위해 어떤 컨트롤을 사용 하시겠습니까? –

+0

데이터 격자를 사용하여 – JeeZ

+0

값을 표시하려면 다음과 같이하십시오. 여기에 "계층 적"관계가 있습니까? 그렇다면 트리 뷰를 고려해보십시오. – BillW

답변

2

당신이 설정 시도 되세요 '\ n'을 허용하는 컬럼의 wrapmode? 위에 게시 한 형식을 산출하는 간단한 예가 있습니다.

dataGridView1.Columns.Add("Column1", "Column1"); 
dataGridView1.Columns.Add("Column2", "Column2");    
dataGridView1.Columns.Add("Column3", "Column3"); 

//this is the key line...to allow \n in column 
dataGridView1.Columns[2].DefaultCellStyle.WrapMode = DataGridViewTriState.True; 

dataGridView1.Rows.Add(new object[] { 1, "v1 v2", "vl1\nvl2\nvl3" }); 
dataGridView1.Rows.Add(new object[] { 2, "v3 v4", "vl4\nvl5\nvl6" }); 
0

당신이 DataGridView를 사용하는 경우, 솔루션은 하나의 문자열로 그 가치를 포맷하고, 그리드의 해당 열에서 해당 문자열을 표시하는 것입니다.

이 작업을 수행하는 방법은 표의 CellFormatting 이벤트를 처리하는 것이며, 해당 열의 경우 형식화 된 값을 이벤트 인수의 e.Value 속성에 넣습니다.

'if the grid is bound to a DataSet, we have a DataRowView as the DataBoundItem 
var row = this.logicalGridView.Rows[e.RowIndex].DataBoundItem as DataRowView; 

if (e.ColumnIndex == 2) 
{ 
     e.Value = String.Format("{0} {1}", row["Column1"], row["Column2"]); 
     e.FormattingApplied = true; 
} 

(과 다른 솔루션은 그리드에 대한 사용자 지정 열 유형을 만들 수 있으며, 세포를 직접 그리는 것입니다. 물론,이 할 더 복잡하다.)

+0

감사합니다 treaschf하지만 어떻게 값의 목록을 표시 할 수 있습니다. 즉, Column3 값 위의 테이블에 표시로? – JeeZ

+0

문자열을 줄 바꿈 문자로 구분할 수 있습니다. 그러나 셀을 별도의 셀로 만들려면 그리드의 각 셀에 대해 새 행을 만들어야합니다. 이러한 행의 경우 첫 번째 셀 (Column1, Column2)을 비워 둘 수 있습니다. DataGridView에는 HTML 테이블의 "rowspan"또는 "colspan"과 같은 것이 없습니다. – treaschf

0

타사 컨트롤을 사용하는 것이 좋습니다.

System.Windows.Forms 컨트롤은 매우 제한되어 있습니다. 이 특정 문제가 DataGridView로 해결할 수 있는지 여부는 알 수 없지만 합리적인 복잡성 (예 : 15-20 화면)의 응용 프로그램을 사용하는 경우에는 타사 컨트롤을 구입하는 데 상당한 시간과 노력을 아낄 수 있습니다.

나는 개인적인 경험에 따라 Developer Express을 매우 권장 할 수 있습니다. 컨트롤의 기능이 매우 광범위하고 가격이 적당하며 지원 담당자가 제품을 위아래로 알고 있습니다.

0

ListView 컨트롤도 작동합니다.

listView1.Items.Clear(); 

    listView1.View = View.Details; 

    ColumnHeader ch1 = listView1.Columns.Add("Index"); 
    ColumnHeader ch2 = listView1.Columns.Add("Column1"); 
    ColumnHeader ch3 = listView1.Columns.Add("Column2"); 
    ColumnHeader ch4 = listView1.Columns.Add("Column3"); 

    ListViewItem lvi1 = listView1.Items.Add("1");  
    lvi1.SubItems.Add("1"); 
    lvi1.SubItems.Add("v1 v2"); 
    lvi1.SubItems.Add("vl1"); 
    ListViewItem lvi2 = listView1.Items.Add("2"); 
    lvi2.SubItems.Add(""); 
    lvi2.SubItems.Add(""); 
    lvi2.SubItems.Add("vl2"); 
    ListViewItem lvi3 = listView1.Items.Add("3"); 
    lvi3.SubItems.Add(""); 
    lvi3.SubItems.Add(""); 
    lvi3.SubItems.Add("vl3"); 
    ListViewItem lvi4 = listView1.Items.Add("4"); 
    lvi4.SubItems.Add("2"); 
    lvi4.SubItems.Add("v3 v4"); 
    lvi4.SubItems.Add("vl4"); 
    ListViewItem lvi5 = listView1.Items.Add("5"); 
    lvi5.SubItems.Add(""); 
    lvi5.SubItems.Add(""); 
    lvi5.SubItems.Add("vl5"); 
    ListViewItem lvi6 = listView1.Items.Add("6"); 
    lvi6.SubItems.Add(""); 
    lvi6.SubItems.Add(""); 
    lvi6.SubItems.Add("vl6");