2013-01-21 1 views
1

두 개의 comboBoxes이 있습니다. 먼저 브랜드를 선택하고 두 번째 모델을 선택합니다. 모델 선택에 따라 picture도 표시하고 싶습니다. 내가 FileInfo 컬럼을 추가 할 때까지 모든 것이 작동하는 것처럼 보였다. 이제 코드가 작동하지 않습니다 (브랜드 및 모델을 선택할 수도 없습니다 - comboboxes are empty). 어떤 것은 잘못된 것입니다 :DataTable의 FileInfo가 작동하지 않습니다.

 dtCategories = new DataTable(); 
     dtCategories.Columns.Add("CategoryID", typeof(int)); 
     dtCategories.Columns.Add("CategoryName", typeof(string)); 

     dtCategories.Rows.Add(0, "--Select--"); 
     dtCategories.Rows.Add(1, "Audi"); 
     dtCategories.Rows.Add(2, "BMW"); 
     dtCategories.Rows.Add(3, "Mercedes"); 

     dtItems = new DataTable(); 
     dtItems.Columns.Add("ItemID", typeof(int)); 
     dtItems.Columns.Add("ItemName", typeof(string)); 
     dtItems.Columns.Add("CategoryID", typeof(int)); 
     dtItems.Columns.Add("Obrazek", typeof(FileInfo)); 

     dtItems.Rows.Add(2, "A1", 1, "a1.jpeg"); 
     dtItems.Rows.Add(3, "A3", 1, "a3.jpeg"); 
     dtItems.Rows.Add(4, "A4", 1, "a5.jpeg"); 
     dtItems.Rows.Add(5, "Seria 1", 2, "bmw1.jpeg"); 
     dtItems.Rows.Add(6, "Seria 2", 2, "bmw3.jpeg"); 
     dtItems.Rows.Add(7, "Seria 3", 2, "bmw5.jpeg"); 
     dtItems.Rows.Add(8, "C Klasa", 3, "C Klasa.jpeg"); 
     dtItems.Rows.Add(9, "E Klasa", 3, "E Klasa.jpeg"); 
     dtItems.Rows.Add(10, "S Klasa", 3, "S Klasa.jpeg"); 


     cbCategory.DisplayMember = "CategoryName"; 
     cbCategory.ValueMember = "CategoryID"; 
     cbCategory.DataSource = dtCategories; 

그리고 :

 private void cbCategory_SelectedIndexChanged(object sender, EventArgs e) 
     { 
     int categoryId = Convert.ToInt32(cbCategory.SelectedValue); 
     if (categoryId > 0) 
     { 
      DataTable dtTemp = dtItems.Select(string.Format("CategoryID = {0}", categoryId)).CopyToDataTable(); 

      DataRow drTemp = dtTemp.NewRow(); 
      drTemp["ItemID"] = 0; 
      drTemp["ItemName"] = "--Select--"; 
      drTemp["CategoryID"] = 0; 

      dtTemp.Rows.InsertAt(drTemp, 0); 

      cbItems.DisplayMember = "ItemName"; 
      cbItems.ValueMember = "ItemID"; 
      cbItems.DataSource = dtTemp; 
      pictureBox1.Image = Image.FromFile(dtTemp.Columns[3].ToString()); 

     } 
     else if (cbItems.DataSource != null) 
     { 
      cbItems.SelectedIndex = 0; 
     } 
    } 
+0

저는 "a1.jpeg"는 유효한 FileInfo 객체가 아닙니다. _Obrazek_ 열을 ** string ** –

답변

1

FileInfoDataTable의 컬럼에 대한 올바른 데이터 유형이 아닙니다. 자세한 내용은 DataColumn.DataType Property을 참조하십시오.

예외가 있습니까?

이미지 경로가 올바르지 않을 수 있습니다.

var imagePath = dtTemp.Columns[3].ToString(); 
if (File.Exists(imagePath)) 
{ 
    var image = Image.FromFile(imagePath); 
    pictureBox1.Image = image; 
} 
else 
{ 
    throw new FileNotFoundException(); 
    // of course something more subtle is advisable 
} 
+0

으로 변경해야합니다. 좋아, 4 유형을 문자열 유형으로 변경했습니다. 하지만 여전히 무엇이 잘못입니까 : pictureBox1.Image = Image.FromFile (dtTemp.Columns [3] .ToString()); – Peter

0

문제는 4 열의 데이터 유형이 FileInfo 것을되지 않습니다 : 당신은 디버깅을 쉽게 할 수있는이 코드를 시도 할 수 있습니다. 행을 추가 할 때 하나를 제공하지 않고 대신에 4 번째 열에 string 유형을 제공합니다. Do

dtItems.Rows.Add(2, "A1", 1, new FileInfo("a1.jpeg")); 
dtItems.Rows.Add(3, "A3", 1, new FileInfo("a3.jpeg")); 
//etc.. 

즉, FileInfo는 보통 DataTable의 적절한 유형이 아닙니다. UR 사용자 정의 테이블의 경우에는 작동하지만 DB에서 직접로드 할 때 호환되지 않습니다. 하지만 귀하의 데이터 테이블은 DataSource입니다.

cbItems.DataSource = dtItems; //fine in your case.