2009-08-11 2 views
1

전에 ListView 컨트롤을 사용한 적이 없으며 런타임에 프로그래밍 방식으로 항목을 삽입하려고합니다.ListView - 항목 삽입

제목이 Title입니다. 그리고 일단 사용자가 FolderBrowserDialog에서 경로를 선택했다면. SelectedPath 내부의 파일 이름을 모두 가져 와서 파일 이름을 Title 열에 항목으로 추가 할 수 있어야합니다. 아무도이 일을하도록 나를 도울 수 있습니까?

답변

3

이 작업을 수행하는 가장 좋은 방법은 FilePaths를 문자열로 가져 오는 대신 FileInfo를 사용하는 것입니다. 이 방법으로 필요한 경우 ListView에 파일에 대한 자세한 정보를 표시 할 수 있습니다 (예를 들어보기를 자세히 설정 한 다음 FileInfo (크기 등)에 대한 그룹을 추가 할 수 있음). 분명히

DirectoryInfo directoryInfo = new DirectoryInfo(@"C:\myDir"); 

FileInfo[] files = directoryInfo.GetFiles(); 

foreach(FileInfo fileInfo in files) 
    { 
    ListViewItem newItem = new ListViewItem(); 
    newItem.Text = fileInfo.Name; 
    newItem.SubItems.Add(fileInfo.Length); //Must have a group added to the ListView (called File Size in this example) 
    listView1.Items.Add(newItem); 
    } 

이는 여전히 (그들없이 잘 작동 할 것이다, 그룹 및 하위 항목을 사용할 필요가 없습니다 :

당신은 목록보기 다음 하위 항목으로 항목을 추가로 그룹을 추가하여이 작업을 수행 할 것 SubItems 부분을 제거하십시오).

+0

그 덕분입니다! 이 사람은 골키퍼 다. –

3

이 코드를보십시오 감사합니다

string[] filePaths = Directory.GetFiles("c:\\MyDir\\"); 

foreach (string str in filePaths) 
{ 
    ListViewItem lvi = new ListViewItem(str); 
    ListView1.Items.Add(lvi) 
} 
+0

우수.대단히 감사합니다. : o) –

0

당신은 View.Details 모드를 사용하고 있습니까? 네가 칼럼을 언급 한 이후로 들리는 군. 그렇다면, 이렇게 보일 것이다 : 당신은 바인더 제본 데이터 그리드를 사용하고이 옵션의

string[] files = Directory.GetFiles(folderBrowser.SelectedPath); 

foreach (string path in paths) { 
    ListViewItem row = new ListViewItem(); 
    row.SubItems.Add(path); 
    YourListView.Items.Add(row); 
} 
0

하나. 그러나 처리하려는 데이터의 양에 따라 다릅니다. 보기에

은 '제목'열이있는 데이터 그리드를 만든 다음에 DataField (또한 제목)에 특정 열을 바인딩 :

이 수행하는 방법이다.

DataGrid를로드 할 때 'title'열에 파일 이름이 채워진 새 DataTable을 만들 수 있습니다. 귀하의 데이터 그리드를 렌더링 할 때


DataTable datatable = new DataTable(); 
DataColumn titleCol = new DataColumn("title", Type.GetType("System.String")); 
datatable.Columns.Add(titleCol); 
foreach(name in names) 
{ 
    DataRow newRow = new DataRow(); 
    newRow["title"] = name; 
    /* 
    * Add the rows you want into your data table 
    */ 

    datatable.Rows.Add(newRow); 
} 

그럼 당신은 단순히 말했다 :


dagagrid.DataSource = datatable; 
datagrid.DataBind(); 

을 트릭을 할 것입니다. 그러나이 솔루션이 데이터 그리드에 더 합리적인 경우에는 하나 이상의 간단한 열이 있습니다.

0

.NET ListView를 처음 시작한 경우 ObjectListView (.NET WinForms ListView를 사용하는 오픈 소스 래퍼)을 사용하면 많은 번거 로움을 피할 수 있습니다. 그것은 당신이 직면하게 될 대부분의 문제와 좌절을 해결합니다.

대부분의 경우, 헤더를 클릭하면 행 정렬을 자동으로 처리하므로 표준 ListView에서 직접 작성해야합니다.

-1
int i = 0; 

//i = LVPurchase.Items.Count + 1; 
LVPurchase.Items.Add(cmbService.SelectedValue.ToString(), i); 

LVPurchase.Items[LVPurchase.Items.Count - 1].SubItems.Add(cmbService.Text); 
LVPurchase.Items[LVPurchase.Items.Count - 1].SubItems.Add(cmbItem.SelectedValue.ToString()); 
LVPurchase.Items[LVPurchase.Items.Count - 1].SubItems.Add(cmbItem.Text); 
LVPurchase.Items[LVPurchase.Items.Count - 1].SubItems.Add(txtPurchaseQty.Text); 
LVPurchase.Items[LVPurchase.Items.Count - 1].SubItems.Add(txtUnitCostUSD.Text); 
LVPurchase.Items[LVPurchase.Items.Count - 1].SubItems.Add(txtConvRate.Text); 
LVPurchase.Items[LVPurchase.Items.Count - 1].SubItems.Add(txtUnitCostBDT.Text); 
SubTotUSD = Convert.ToDouble(txtPurchaseQty.Text) * Convert.ToDouble(txtUnitCostUSD.Text); 
txtSubTotUSD.Text = SubTotUSD.ToString(); 
SubTotBDT = Convert.ToDouble(txtPurchaseQty.Text) * Convert.ToDouble(txtUnitCostBDT.Text); 
txtSubTotBDT.Text = SubTotBDT.ToString(); 
LVPurchase.Items[LVPurchase.Items.Count - 1].SubItems.Add(txtSubTotUSD.Text); 
LVPurchase.Items[LVPurchase.Items.Count - 1].SubItems.Add(txtSubTotBDT.Text); 

LVPurchase.Items[LVPurchase.Items.Count - 1].SubItems.Add(txtBatch.Text); 
LVPurchase.Items[LVPurchase.Items.Count - 1].SubItems.Add(dtpExpiryDate.Value.ToString()); 

TotalUSD = TotalUSD + SubTotUSD; 
txtTotalUSD.Text = TotalUSD.ToString(); 
TotalBDT = TotalBDT + SubTotBDT; 
txtTotalBDT.Text = TotalBDT.ToString();