DEVEXPRESS控件GridControl数据增、删、改、查操作
首先建一个窗体,在窗体中有一个gridcontrol控件用于显示boys列表,还有btn增,btn删、btn改、btn查按钮, txtName和txtAge文本框,用于显示名称和年龄, pictureEdit1用于显示boy图片,btnLoad按钮用于加载图片,pictureEdit1框中的图自动适应图片框的大小 txtPath文本框用于显示图片新生成的文件名,images目录用于读取和写入图片的
今天,做了一个通过DEVEXPRESS控件GridControl进行数据增、删、改、查操作的一个winform实例,在此做个记录。方便以后查阅。
在程序中用了静态类的集合来模拟,两个类如下:
public class Boy
{
public string Name { get; set; }
public int Age { get; set; }
public string ImgPath { get; set; }
}
public static class BoyLists
{
public static List<Boy> boys = new List<Boy>();
}
程序运行后界面如下图所示:
首先建一个窗体,在窗体中有一个gridcontrol控件用于显示boys列表,还有btn增,btn删、btn改、btn查按钮, txtName和txtAge文本框,用于显示名称和年龄, pictureEdit1用于显示boy图片,btnLoad按钮用于加载图片,pictureEdit1框中的图自动适应图片框的大小 txtPath文本框用于显示图片新生成的文件名,images目录用于读取和写入图片的目录, 图片加载后能够按日期和时间重新命名。 程序运行正常的逻辑是: 输入名称和年龄,然后btnLoad图片,然后点btn增 按钮,添加成功,在列表控件中显示。 在列表控件中单击一行数据,数据分别显示在文本框中,可修改,同时图片也可重新添加。
时同在gridcontrol控件中新增了一列图片,用于显示图片。
下面,我们分别来看代码:
在主窗体的初始化中,执行了以下一些方法:
public boyForm()
{
InitializeComponent();
gridControl1.DataSource = BoyLists.boys;
gridView1.SelectionChanged += GridView1_SelectionChanged;
// 获取GridControl的默认视图
GridView gridView = gridControl1.MainView as GridView;
// 添加显示图片的列
AddImageColumn(gridView);
}
添加图片的方法如下:
private void AddImageColumn(GridView gridView)
{
// 创建一个新的GridColumn对象
GridColumn imageColumn = new GridColumn
{
FieldName = "ImageColumn", // 这是一个虚拟字段名,因为我们将在自定义绘制中处理图像
Caption = "图片",
Visible = true,
VisibleIndex = gridView.Columns.Count, // 将新列添加到现有列的末尾
UnboundType = DevExpress.Data.UnboundColumnType.Object // 如果图片数据不是直接来自数据源,则设置为Unbound类型
};
// 创建一个RepositoryItemPictureEdit对象来作为图片的编辑器
// 创建一个RepositoryItemPictureEdit对象来作为图片的编辑器
RepositoryItemPictureEdit pictureEdit = new RepositoryItemPictureEdit
{
SizeMode = DevExpress.XtraEditors.Controls.PictureSizeMode.Stretch, // 设置图片大小模式
NullText = "无图片", // 当没有图片时显示的文本
// 可以设置其他属性,如图片的高度、宽度等
};
// 将RepositoryItemPictureEdit分配给GridColumn
imageColumn.ColumnEdit = pictureEdit;
// 将图片列添加到GridView中
gridView.Columns.Add(imageColumn);
// 将图片列添加到GridControl的视图中
gridView.CustomDrawCell += GridView_CustomDrawCell;
}
在列表中显示图片:
private void GridView_CustomDrawCell(object sender, RowCellCustomDrawEventArgs e)
{
// 检查是否是我们要自定义绘制的列
if (e.Column.FieldName == "ImageColumn")
{
// 获取当前行的数据对象(这里假设你的数据源是List<Boy>)
var boy = gridView1.GetRow(e.RowHandle) as Boy;
if (boy != null && !string.IsNullOrEmpty(boy.ImgPath))
{
// 构造图片的全路径(这里假设图片存放在应用程序的images文件夹下)
string fullPath = Path.Combine(Application.StartupPath, "images", boy.ImgPath);
if (File.Exists(fullPath))
{
// 加载图片
Image img = Image.FromFile(fullPath);
// 绘制图片到单元格中
e.Graphics.DrawImage(img, e.Bounds);
// 释放图片资源(如果你不打算在之后再次使用它)
img.Dispose();
// 表示已经自定义绘制了单元格,不需要默认绘制
e.Handled = true;
}
}
}
}
当选中某行数据时的变化:
private void GridView1_SelectionChanged(object sender, DevExpress.Data.SelectionChangedEventArgs e)
{
// 获取选中的行数据
var selectedBoy = gridView1.GetFocusedRow() as Boy;
if (selectedBoy != null)
{
// 将选中行的数据加载到文本框和图片控件中
txtName.Text = selectedBoy.Name;
txtAge.Text = selectedBoy.Age.ToString();
txtPath.Text = selectedBoy.ImgPath;
// 加载图片
LoadImage(selectedBoy.ImgPath);
}
}
加载图片到图片框:
private void LoadImage(string imgPath)
{
if (!string.IsNullOrEmpty(imgPath))
{
string fullPath = Path.Combine(Application.StartupPath, "images", imgPath);
if (File.Exists(fullPath))
{
Image img = Image.FromFile(fullPath);
pictureEdit1.Image = img;
pictureEdit1.Properties.SizeMode = DevExpress.XtraEditors.Controls.PictureSizeMode.Stretch;
}
else
{
pictureEdit1.Image = null;
}
}
else
{
pictureEdit1.Image = null;
}
}
点击新按钮新增数据:
private void btn增_Click(object sender, EventArgs e)
{
// 验证输入
if (string.IsNullOrWhiteSpace(txtName.Text) || string.IsNullOrWhiteSpace(txtAge.Text))
{
MessageBox.Show("请输入名称和年龄!");
return;
}
// 添加新的Boy对象到列表中
var newBoy = new Boy
{
Name = txtName.Text,
Age = int.Parse(txtAge.Text),
ImgPath = txtPath.Text // 这里存储的是相对路径或文件名,根据需要调整
};
BoyLists.boys.Add(newBoy);
// 刷新GridControl以显示新添加的数据
gridControl1.RefreshDataSource();
}
删除和修改数据:
private void btn删_Click(object sender, EventArgs e)
{
// 从列表中删除选中的Boy对象
var selectedBoy = gridView1.GetFocusedRow() as Boy;
if (selectedBoy != null)
{
BoyLists.boys.Remove(selectedBoy);
gridControl1.RefreshDataSource();
}
}
private void btn改_Click(object sender, EventArgs e)
{
// 编辑选中的Boy对象
var selectedBoy = gridView1.GetFocusedRow() as Boy;
if (selectedBoy != null)
{
selectedBoy.Name = txtName.Text;
selectedBoy.Age = int.Parse(txtAge.Text);
// 如果图片已加载,则不需要更改ImgPath
gridControl1.RefreshDataSource();
}
}
加载图片:
private void btnLoad_Click(object sender, EventArgs e)
{
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
string filePath = openFileDialog.FileName;
txtPath.Text = Path.GetFileName(filePath); // 显示文件名
// 加载图片并调整大小
Image img = Image.FromFile(filePath);
pictureEdit1.Image = img;
pictureEdit1.Properties.SizeMode=DevExpress.XtraEditors.Controls.PictureSizeMode.Stretch; // 或其他适当的模式
// 复制图片到images目录并重命名
string imagesDir = Path.Combine(Application.StartupPath, "images");
string newFileName = DateTime.Now.ToString("yyyyMMddHHmmss") + Path.GetExtension(filePath);
string newFilePath = Path.Combine(imagesDir, newFileName);
File.Copy(filePath, newFilePath, true);
// 更新图片路径
// 更新当前选中行的图片路径
var selectedBoy = gridView1.GetFocusedRow() as Boy;
if (selectedBoy != null)
{
selectedBoy.ImgPath = newFileName;
txtPath.Text = newFileName;
// 加载新图片到图片控件中
LoadImage(newFileName);
}
}
}
}
当鼠标点击某行时取得焦点,选中状态:
private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
{
var selectedBoy = gridView1.GetFocusedRow() as Boy;
if (selectedBoy != null)
{
txtName.Text = selectedBoy.Name;
txtAge.Text = selectedBoy.Age.ToString();
// 加载并显示图片
if (!string.IsNullOrEmpty(selectedBoy.ImgPath))
{
string imagePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "images", selectedBoy.ImgPath);
if (File.Exists(imagePath))
{
var image = Image.FromFile(imagePath);
pictureEdit1.Image = image;
}
else
{
pictureEdit1.Image = null;
}
}
else
{
pictureEdit1.Image = null;
}
}
}

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)