devexpress datagrid 与imageEdit以及如何存图片到数据库

题外话


有的时候,需要把图片存入数据库。


这样做,有好处,当然也有坏处。


好处是,如果图片存在数据库,则后期维护方便得多。

因为如果文件存在磁盘上,那么随着开发时间的增加,最后我们难以分辨哪些图片文件是有用的,哪些不是。


如果存在数据内部,则好管理得多。


然而存在数据库内部,会导致我们程序启动和加载困难。

所以,这里需要有取舍与限制和缓存。


不过,对于程序,我更希望前期多费点劲,后期少维护。


人们常说,行百里路者半九十。

但做程序,可不能这样,如果眼看着要做成了,但几个小问题搞得痛不欲生(要是遇上性能问题,就更傻眼)。

还不如,压住节奏,稳扎稳扎。

毕竟程序与行路,还是有很大差别的。最后十里,咬咬牙也就走过去了,可是许多程序,走不过最后几步。


所以,我宁愿图片存入数据库。


一般来讲,我会倾向于CS结构,因为这种程序,给用户的感知好,并且能减小服务器压力。

如果图片存在数据库,最好在Client端,把图片进行缓存,比如存到本地数据库或本地磁盘。


当然,本文不讲这些事情。下面回正题。


问题的提出与解决

首先建立了一个数据库的表,这个表中,有一个字段是image类型(SQL Server数据库)

USE [SchedulerDB]
GO

/****** Object:  Table [dbo].[Resources]    Script Date: 11/19/2014 10:16:03 ******/
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Resources]') AND type in (N'U'))
DROP TABLE [dbo].[Resources]
GO

USE [SchedulerDB]
GO

/****** Object:  Table [dbo].[Resources]    Script Date: 11/19/2014 10:16:03 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Resources](
	[UniqueID] [int] IDENTITY(1,1) NOT NULL,
	[ResourceID] [int] NOT NULL,
	[ResourceName] [nvarchar](50) NULL,
	[Color] [int] NULL,
	[Image] [image] NULL,
	[CustomField1] [nvarchar](max) NULL,
 CONSTRAINT [PK_Resources] PRIMARY KEY CLUSTERED 
(
	[UniqueID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'岗位' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Resources'
GO



然后与datagrid进行了映射。


然后,在image字段上,绑定一个ImageEdit编辑控件。


然后运行,


然后,就得到这个错误:Object must implement IConvertible

网上找了找,没有。

然后我就试了试


把PictureStoreMode改成ByteArray

然后就OK了。


对了,保存所对应的代码为:

 

       void saveToolStripButton_Click(object sender, EventArgs e)
        {
 
            this.Validate();
            this.resourcesBindingSource.EndEdit();
            this.resourcesTableAdapter.Update(this.schedulerDBDataSet);
            schedulerDBDataSet.AcceptChanges();
        }

====================

有同仁问关于图像大小如何自适应,实际我也不会。

不过,这张图,也许有用,所以放在这里:


==========

后面又找了找:

在例子:

C:\Users\Public\Documents\DevExpress Demos 17.1\Components\WinForms\CS\GridMainDemo


demo center  的 winforms


--


也是同样的道理。

路径在:

C:\Users\Public\Documents\DevExpress Demos 17.1\Components\WinForms\CS\GridMainDemo



谢谢您的阅读。
在使用DevExpress控件的Gridview进行数据添加时,可以按照以下步骤进行操作: 1. 首先,需要确保已经连接到数据库,并创建好与Gridview所对应的数据表。 2. 接下来,需要使用GridView的DataRows属性来遍历所有行。可以使用循环来逐行遍历,然后获取每行的数据。 3. 对于每一行数据,需要创建一个与数据表对应的Insert SQL命令,将数据插入到数据库中。 4. 在循环中,逐行执行Insert SQL命令,将数据插入到数据库中。 下面是一个简单的示例代码,用于说明如何使用DevExpress的Gridview将行数据添加到数据库中: using DevExpress.XtraGrid.Views.Grid; using System.Data.SqlClient; private void AddRowsToDatabase() { // 连接到数据库 string connectionString = "YourConnectionString"; SqlConnection connection = new SqlConnection(connectionString); connection.Open(); // 获取GridView的DataRows属性 GridView gridView = gridView1; // 这里假设Gridview的名称为gridView1 for (int i = 0; i < gridView.DataRowCount; i++) { // 获取每一行的数据 object[] rowValues = ((DataRowView)gridView.GetRow(i)).Row.ItemArray; // 创建Insert SQL命令 SqlCommand command = new SqlCommand("INSERT INTO TableName (Column1, Column2, Column3) VALUES (@Value1, @Value2, @Value3)", connection); command.Parameters.AddWithValue("@Value1", rowValues[0]); command.Parameters.AddWithValue("@Value2", rowValues[1]); command.Parameters.AddWithValue("@Value3", rowValues[2]); // 执行Insert SQL命令 command.ExecuteNonQuery(); } // 关闭数据库连接 connection.Close(); } 请注意,以上代码仅为示例,需要根据实际情况进行调整。确保连接字符串正确,以及数据表的列名和参数名称等都正确对应。 希望以上回答能够帮助到您,如有更多疑问,请随时追问。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值