Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#WinForms&;SQL Server:如何使用存储过程在gridview中渲染图像_C#_Sql Server_Winforms_Stored Procedures - Fatal编程技术网

C#WinForms&;SQL Server:如何使用存储过程在gridview中渲染图像

C#WinForms&;SQL Server:如何使用存储过程在gridview中渲染图像,c#,sql-server,winforms,stored-procedures,C#,Sql Server,Winforms,Stored Procedures,如何使用存储过程在Gridview中渲染图像 当前gridview中显示的是图像或文件夹的路径(位置),但我需要渲染图像本身-第一列必须成为图像列。这适用于使用C#的Windows窗体。谢谢你的帮助 现在使用以下给定代码:) 但是使用计时器每1秒更新一次void FillDataGirdView_Main()时会遇到另一个错误 如果已将路径保存到数据库中,则可以使用DataGridViewImageColumn”和CellFormatting事件加载图像 您可以在此处查看页面最后一篇文章中的示

如何使用存储过程在Gridview中渲染图像

当前gridview中显示的是图像或文件夹的路径(位置),但我需要渲染图像本身-第一列必须成为图像列。这适用于使用C#的Windows窗体。谢谢你的帮助

现在使用以下给定代码:) 但是使用计时器每1秒更新一次void FillDataGirdView_Main()时会遇到另一个错误


如果已将路径保存到数据库中,则可以使用
DataGridViewImageColumn
”和
CellFormatting
事件加载图像

您可以在此处查看页面最后一篇文章中的示例:


要实现您的目标,请在表单上放置
DataGridView
控件并定义列。在我的示例中,有两列,第一列用于显示图像(列类型
DataGridViewImageColumn
),第二列是文本列(类型
DataGridViewTextBoxColumn
),如下图所示:

在代码中,在使用存储过程将数据加载到
DataTable
中后,遍历行并在
dgvNextCycleTime
控件中创建这些行,如下所示:

//this is my test data, you should start with foreach line
DataTable dataTbl = new DataTable();
dataTbl.Columns.Add("ImageColumn", typeof(string));
dataTbl.Columns.Add("SecondColumn", typeof(string));

dataTbl.Rows.Add(new string[] { @"c:\temp\img1.png", "some title" });
dataTbl.Rows.Add(new string[] { @"c:\temp\img2.png", "some title2" });

//here you need to go through every row in DataTable, create Image object from path
foreach (DataRow row in dataTbl.Rows)
{
    Image img = Image.FromFile(row[0].ToString()); //be sure you're getting path from correct column (first one in my example)
    dgvNextCycleTime.Rows.Add(new object[] { img, row[1].ToString() }); //second column, with some text
}
结果是:


您需要为图像添加新列,并使图像路径可见性=false

因此,您的代码如下所示:-

sqlCon = new SqlConnection(connectionString);
        if (sqlCon.State == ConnectionState.Closed)
            sqlCon.Open();

        SqlDataAdapter sqlDA = new SqlDataAdapter("[sp_selectTop10CycleTime]", sqlCon);
        sqlDA.SelectCommand.CommandType = CommandType.StoredProcedure;

        sqlDA.SelectCommand.Parameters.AddWithValue("@date", DateTime.Now.ToShortDateString());


        DataTable dataTbl = new DataTable();


        sqlDA.Fill(dataTbl);

        dgvNextCycleTime.DataSource = dataTbl;

        sqlCon.Close();
        //////////////////////////////// New code ////////////////////////////
        int ImagePathIndex = 0; // assuming that the image path  column is 0 (See in your case) 
        dgvNextCycleTime.Columns[ImagePathIndex].Visible = false; // Make visibility for the path = false

        DataGridViewImageColumn ImageColunm = new DataGridViewImageColumn();
        ImageColunm.HeaderText = "Image";
        ImageColunm.Name = "ImageName";
        ImageColunm.ImageLayout = DataGridViewImageCellLayout.Stretch;
        ImageColunm.Image = null;
        dgvNextCycleTime.Columns.Add(ImageColunm); // Add the new colunm to the grid 


        // Add the image to the new column in the grid
        foreach (DataGridViewRow row in dgvNextCycleTime.Rows)
        {

            Image img = Image.FromFile(row.Cells[ImagePathIndex].Value.ToString());
            DataGridViewImageCell cell = row.Cells["ImageName"] as DataGridViewImageCell;
            cell.Value = img;
        }

谢谢Hassan Badry我更新了问题。。我在使用计时器时遇到错误,但没有计时器,它很平滑。。请帮忙。我想在foreach循环中遇到了问题?尝试调试时,当循环结束并再次尝试启动循环时,指向foreach循环的第一行时出错。希望您能帮助我解决这个问题,请稍后尝试从代码中删除以下行:-DataGridViewImageColumn ImageColumn=new DataGridViewImageColumn();ImageColunm.HeaderText=“Image”;ImageColunm.Name=“ImageName”;ImageColunm.ImageLayout=DataGridViewImageCellLayout.Normal;ImageColunm.Image=null;dgvNextCycleTime.Columns.Insert(1,ImageColunm);然后将它们放在form load而不是应用您指示的,但formload中指向dgvNextCycleTime的错误提示。谢谢Nino,这正在工作。但是我更新了问题。。请帮忙。使用计时器每秒钟更新一次gridview,出现提示错误。谢谢我想在foreach循环中遇到了一个问题?尝试调试时,当循环结束并再次尝试启动循环时,指向foreach循环的第一行时出错。希望你能帮我解决这个问题
//this is my test data, you should start with foreach line
DataTable dataTbl = new DataTable();
dataTbl.Columns.Add("ImageColumn", typeof(string));
dataTbl.Columns.Add("SecondColumn", typeof(string));

dataTbl.Rows.Add(new string[] { @"c:\temp\img1.png", "some title" });
dataTbl.Rows.Add(new string[] { @"c:\temp\img2.png", "some title2" });

//here you need to go through every row in DataTable, create Image object from path
foreach (DataRow row in dataTbl.Rows)
{
    Image img = Image.FromFile(row[0].ToString()); //be sure you're getting path from correct column (first one in my example)
    dgvNextCycleTime.Rows.Add(new object[] { img, row[1].ToString() }); //second column, with some text
}
sqlCon = new SqlConnection(connectionString);
        if (sqlCon.State == ConnectionState.Closed)
            sqlCon.Open();

        SqlDataAdapter sqlDA = new SqlDataAdapter("[sp_selectTop10CycleTime]", sqlCon);
        sqlDA.SelectCommand.CommandType = CommandType.StoredProcedure;

        sqlDA.SelectCommand.Parameters.AddWithValue("@date", DateTime.Now.ToShortDateString());


        DataTable dataTbl = new DataTable();


        sqlDA.Fill(dataTbl);

        dgvNextCycleTime.DataSource = dataTbl;

        sqlCon.Close();
        //////////////////////////////// New code ////////////////////////////
        int ImagePathIndex = 0; // assuming that the image path  column is 0 (See in your case) 
        dgvNextCycleTime.Columns[ImagePathIndex].Visible = false; // Make visibility for the path = false

        DataGridViewImageColumn ImageColunm = new DataGridViewImageColumn();
        ImageColunm.HeaderText = "Image";
        ImageColunm.Name = "ImageName";
        ImageColunm.ImageLayout = DataGridViewImageCellLayout.Stretch;
        ImageColunm.Image = null;
        dgvNextCycleTime.Columns.Add(ImageColunm); // Add the new colunm to the grid 


        // Add the image to the new column in the grid
        foreach (DataGridViewRow row in dgvNextCycleTime.Rows)
        {

            Image img = Image.FromFile(row.Cells[ImagePathIndex].Value.ToString());
            DataGridViewImageCell cell = row.Cells["ImageName"] as DataGridViewImageCell;
            cell.Value = img;
        }