using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

引用

选择DataGridView中的某一行,离开后,若数据变化则更新到数据库,若没变则不做操作.精髓部分:当点击一个单元格,如果已经换了行并且数据改变,会更新数据到数据库,并从数据库加载数据,再把之前点击的那个单元格设为选定状态,使得操作体验良好.代码如下:
 namespace UI
{
public partial class FormStockList : Form
{
public FormStockList()
{
InitializeComponent();
this.dgvStockList.AutoGenerateColumns = false;//自动产生列设置为false;
} //加载商品ID的下拉列表的数据源和DGV的数据源.
private void FormStockList_Load(object sender, EventArgs e)
{
//把DataGridView中名为goodsId的下拉列表列取出来,设置重要属性.
DataGridViewComboBoxColumn col = this.dgvStockList.Columns["goodsId"] as DataGridViewComboBoxColumn;
col.DataSource = new BLL.GoodsBLL().GetModelList("");
col.DisplayMember = "Name";
col.ValueMember = "GoodsId";
col.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing; LoadDataByPageIndex();//加载DataGridView的数据源.
} int cellRowIndex;//全局变量,存储单元格行号
int cellColumnIndex;//全局变量,存储单元格列号 int PreSelectRowIndex;//存储行号,以后用来判断是否换行.
bool isFirstSelectRow = true;//标识是否给变量PreSelectRowIndex赋过值.没为PreSelectRowIndex赋过值,则为true.
private void dgvStockList_CellClick(object sender, DataGridViewCellEventArgs e)
{
//DataGridView dgv = (DataGridView)sender;
cellRowIndex = this.dgvStockList.CurrentCell.RowIndex;//为cellRowIndex赋值
cellColumnIndex = this.dgvStockList.CurrentCell.ColumnIndex;//为cellColumnIndex赋值
if (isFirstSelectRow)//若isFirstSelectRow为true,说明PreSelectRowIndex是未赋过值
{
PreSelectRowIndex = e.RowIndex;//把当前行号赋值给PreSelectRowIndex
isFirstSelectRow = false;//说明已经给PreSelectRowIndex赋值
}
else//如果已经给PreSelectRowIndex赋值
{
if (e.RowIndex != PreSelectRowIndex)//当前选的单元格的行号和存储的行号不一样,说明换行了.
{
PreSelectRowIndex = e.RowIndex;//存储新行的行号.
SelectionRowChanged();//换行时要执行的方法.可能或重新绑定dgvStockList的数据源.
this.dgvStockList.Rows[cellRowIndex].Cells[cellColumnIndex].Selected = true;//针对可能重新绑定dgvStockList的数据源的情况,重新设置当前选中的单元格为重新绑定数据源前用户已选的单元格.
}
}
this.dgvStockList.BeginEdit(true);//dgvStockList_CellClick点击事件会选择一个单元格,BeginEdit让当前单元格可以编辑,能触发dgvStockList_CellBeginEdit事件.
} ////换行时判断是否值有变化,如果有,就把行数据更新到数据库.重新加载数据源.
private void SelectionRowChanged()
{
if (isEdit)//判断该行是否编辑过
{
if (temp.GoodsId != stock.GoodsId || temp.SCount != stock.SCount || temp.StockPrice != stock.StockPrice)//判断编辑过后该行的数据是否改变,如果改变了,就更新数据到数据库.
{
new BLL.StockBLL().Update(stock);//把变动后的行数据更新到数据库.
LoadDataByPageIndex();//重新加载dgvStockList的数据源.
}
}
isEdit = false;//重置isEdit的状态.
isFirst = true;//重置isFirst的状态.
} Model.Stock stock = null;//存储变动后的行数据的实体对象.
Model.Stock temp = null;//存储变动前的行数据的实体对象
bool isFirst = true;//标识是否是第一次编辑该行.
bool isEdit = false;//标识一行是否被编辑过.如果没有,以后就不用更新行数据到数据库. private void dgvStockList_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
isEdit = true;//标识该行被编辑.
stock = this.dgvStockList.SelectedRows[].DataBoundItem as Model.Stock;//把该行的对象用存入变量stock
if (isFirst)//如果是第一次要开始编辑该行,即该行还没有被编辑过.
{
temp = new Model.Stock();//存储该行最初的数据.
temp.GoodsId = stock.GoodsId;
temp.SCount = stock.SCount;
temp.StockPrice = stock.StockPrice;
isFirst = false;//标识该行不再是第一次被编辑了.
}
}
int pageIndex = ;//页索引
int pageCount = ;//每页显示几条数据
private void LoadDataByPageIndex()
{
this.dgvStockList.DataSource = new BLL.StockBLL().GetStockListByPage(pageIndex, pageCount);
}//加载dgvStockList的数据. //点击上一页
private void btnPre_Click(object sender, EventArgs e)
{
pageIndex--;
if (pageIndex < )
{
MessageBox.Show("已经第一页了"); pageIndex++; return;
}
LoadDataByPageIndex();
} //点击下一页
private void btnNext_Click(object sender, EventArgs e)
{
pageIndex++;
if (pageIndex > Model.Save.TPageCount)//Model.Save.TPageCount存的是总的页数.
{
MessageBox.Show("已经最后一页了"); pageIndex--; return;
}
LoadDataByPageIndex();
}
}
}

WinForm中DataGridView显示更新数据--人性版的更多相关文章

  1. WinForm中DataGridView导出为Excel(快速版)

    public static void ExportExcel(DataGridView myDGV, string fileName) { string saveFileName = fileName ...

  2. winform中dataGridView隔行显示不同的背景色,鼠标移动上显示不同颜色,离开后变回原色

    winform中dataGridView隔行显示不同的背景色,鼠标移动上显示不同颜色,离开后变回原色 先设置奇数行颜色,这个有个自带的属性AlternatingRowsDefaultCellStyle ...

  3. 【接上一篇】winform中dataGridView高度和宽度自适应填充完数据的高度和宽度,即dataGridView根据数据自适应大小

    上一篇:winform中dataGridView高度自适应填充完数据的高度 winform中dataGridView高度自适应填充完数据的高度,就是dataGridView自身不产生滚动条,自己的高度 ...

  4. winform中dataGridView高度自适应填充完数据的高度

    // winform中dataGridView高度自适应填充完数据的高度,就是dataGridView自身不产生滚动条,自己的高度是根据数据的多少而变动. 在load的时候,数据绑定后,加上如下代码: ...

  5. winform中dataGridView单元格根据值设置新值,彻底解决绑定后数据类型转换的困难

    // winform中dataGridView单元格在数据绑定后,数据类型更改困难,只能迂回实现.有时候需要将数字变换为不同的文字描述,就会出现int32到string类型转换的异常,借助CellFo ...

  6. C# Winform中DataGridView的DataGridViewCheckBoxColumn使用方法

    下面介绍Winform中DataGridView的DataGridViewCheckBoxColumn使用方法: DataGridViewCheckBoxColumn CheckBox是否选中 在判断 ...

  7. 在Winform中直接录入表格数据和在Vue&Elment中直接录入表格数据的比较

    一般来说,录入数据的时候,我们都采用在一个窗体界面中,根据不同内容进行录入,但是有时候涉及主从表的数据录入,从表的数据有时候为了录入方便,也会通过表格控件直接录入.在Winform开发的时候,我们很多 ...

  8. WinForm中DataGridView复制选中单元格内容解决方案

    WinForm中DataGridView鼠标选中单元格内容复制方案 1.CTR+C快捷键复制 前提:该控件ClipboardCopyMode属性设置值非Disable: 2.鼠标框选,自定义代码实现复 ...

  9. WPF:使用Json.NET在TreeView中树形显示JSON数据

    原文 WPF:使用Json.NET在TreeView中树形显示JSON数据 据 读者可以参考这个开源的可以树形显示XML和JSON的工具: Mgen Object 603:XML/JSON树形显示小工 ...

随机推荐

  1. windbg 基础命令实战 - 简单程序破解

    以前玩游戏遇到一些实在过不去的管卡,经常会找一些游戏修改软件来修改游戏,让自己变得无比强大,将boss一路砍瓜切菜过足游戏瘾.其实游戏修改软件的功能大多都比较简单,我们可以通过windbg的一些简单命 ...

  2. java程序 启动时参数

      iEMP34:/opt/version/lktest/b030/jre/jre_linux/bin # ./java -classpath . SysInfo Exception in threa ...

  3. vi 卡住怎么办

    http://zhidao.baidu.com/question/93283359.html ---------- 我貌似好像按了ctrl+s... 用惯了windows人,会习惯性地按Ctrl+S来 ...

  4. Node.js与Sails~中间查询语言Waterline

    回到目录 上讲主要说了如何配置sails的持久化机制,这讲主要说一下实现持久化时的增删改查的语法,在sails里使用了和mongodb风格类似的waterline查询语言,使用简单,语法生动,下面我们 ...

  5. document对象

    document 对象是操作网页内容的 找元素 1.根据id找 document.getElementById(); 2.根据class找 document.getElementsByClassNam ...

  6. 获取当前请求的URL的地址、参数、参数值、各种属性

    //URL: http://localhost:1897/User/Press/UserContent.aspx/9878?id=1#toc Request.ApplicationPath; //结果 ...

  7. react7 react 三目运算

    <body><!-- React 真实 DOM 将会插入到这里 --><div id="example"></div> <!- ...

  8. css知多少(5)——选择器

    1. 引言 从本节开始,就进入本系列的第二个部分——css和html的结合——说白了就是选择器. CSS中定义了样式,如何将这些样式设置到相应的html节点上?就不得不通过选择器.让浏览器知道css选 ...

  9. 提高 DHTML 页面性能

    联盟电脑摘要:本文说明了某些DHTML功能对性能的重大影响,并提供了一些提高DHTML页面性能的技巧. 目录 简介 成批处理DHTML更改 使用innerText 使用DOM添加单个元素 扩展SELE ...

  10. 自己动手写中文分词解析器完整教程,并对出现的问题进行探讨和解决(附完整c#代码和相关dll文件、txt文件下载)

    中文分词插件很多,当然都有各自的优缺点,近日刚接触自然语言处理这方面的,初步体验中文分词. 首先感谢harry.guo楼主提供的学习资源,博文链接http://www.cnblogs.com/harr ...