C# DataTable中的FileInfo不工作

C# DataTable中的FileInfo不工作,c#,.net,datatable,C#,.net,Datatable,我有两个组合框。首先我选择品牌,第二我选择型号。我还想根据型号选择显示图片。在我添加FileInfo列之前,一切似乎都正常。现在代码不起作用了(我甚至不能选择品牌和型号-组合框是空的)。出了什么问题: dtCategories = new DataTable(); dtCategories.Columns.Add("CategoryID", typeof(int)); dtCategories.Columns.Add("CategoryName",

我有两个
组合框
。首先我选择品牌,第二我选择型号。我还想根据型号选择显示
图片
。在我添加
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;
        }
    }

FileInfo
不是
DataTable
列的有效数据类型。有关更多信息,请参阅

您是否收到某种例外情况

可能是图像路径不正确。 您可以尝试以下代码,这可能更易于调试:

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
}

FileInfo
不是
DataTable
列的有效数据类型。有关更多信息,请参阅

您是否收到某种例外情况

可能是图像路径不正确。 您可以尝试以下代码,这可能更易于调试:

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
}

问题不在于第4列的数据类型是
FileInfo
。在添加行时,您没有提供一个字符串,而是为第4列提供一个
string
类型。做

dtItems.Rows.Add(2, "A1", 1, new FileInfo("a1.jpeg"));
dtItems.Rows.Add(3, "A3", 1, new FileInfo("a3.jpeg"));
//etc..
也就是说,FileInfo通常不是DataTable的合适类型。对于自定义表,它可能会工作,但在从db直接加载到该数据表时不兼容。但是您的datatable可以作为
数据源

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

问题不在于第4列的数据类型是
FileInfo
。在添加行时,您没有提供一个字符串,而是为第4列提供一个
string
类型。做

dtItems.Rows.Add(2, "A1", 1, new FileInfo("a1.jpeg"));
dtItems.Rows.Add(3, "A3", 1, new FileInfo("a3.jpeg"));
//etc..
也就是说,FileInfo通常不是DataTable的合适类型。对于自定义表,它可能会工作,但在从db直接加载到该数据表时不兼容。但是您的datatable可以作为
数据源

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

好的,我把4型改成了字符串型。但仍然存在问题:pictureBox1.Image=Image.FromFile(dtTemp.Columns[3].ToString());好的,我把4型改成了字符串型。但仍然存在问题:pictureBox1.Image=Image.FromFile(dtTemp.Columns[3].ToString());我认为
“a1.jpeg”
不是有效的FileInfo对象。您应该将Obrazek列更改为string。我认为
“a1.jpeg”
不是有效的FileInfo对象。您应该将Obrazek列更改为string