DataGridView前幾列數據如果有改動則改變后兩列的數據。

Freeedom 2008-12-20 11:09:57
例如:
有DataGridView1,
A,B,C,修改人,修改時間
----------------------------------
a,b,c,xxxxxx, 2008-12-20 10:58:45
d,e,f,yyyyyy, 2008-12-20 11:06:42

如果前3列即A、B、C的數據有任何改變,則后兩列數據即修改人等於某個值(即當前用戶ID),修改時間等於系統當前時間。
前提是后兩列是ReadOnly,不允許讓用戶更改。若沒有

請問這一需求該如何處理才好?有簡單例子最好,沒有的話給個思路也行。
就是有誰修改過數據,保留最後一位修改人的ID和時間信息,用戶沒有刪除權限,所以不用考慮刪除。
...全文
78 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yilanwuyu123 2008-12-20
  • 打赏
  • 举报
回复
mark 那就先要标识出用户ID 其他的不是多么难的事情
net5i 2008-12-20
  • 打赏
  • 举报
回复
只读功能仅仅是针对用户来说是只读的,但是代码中还是可以改的:
DataGridViewRow modifiedRow = this.dataGridView1.CurrentRow;
modifiedRow.Cells[3].Value = "修改人";
modifiedRow.Cells[4].Value = "修改时间";
Freeedom 2008-12-20
  • 打赏
  • 举报
回复
UP
Freeedom 2008-12-20
  • 打赏
  • 举报
回复
例如:
有DataGridView1,
A,B,C,修改人,修改時間
----------------------------------
a,b,c,xxxxxx, 2008-12-20 10:58:45
d,e,f,yyyyyy, 2008-12-20 11:06:42

如果前3列即A、B、C的數據有任何改變,則后兩列數據即修改人等於某個值(即當前用戶ID),修改時間等於系統當前時間。
前提是后兩列是ReadOnly,不允許讓用戶更改。

請問這一需求該如何處理才好?有簡單例子最好,沒有的話給個思路也行。
就是有誰修改過數據,保留最後一位修改人的ID和時間信息,用戶沒有刪除權限,所以不用考慮刪除。
Freeedom 2008-12-20
  • 打赏
  • 举报
回复
谢谢!我参考下.
wangping_li 2008-12-20
  • 打赏
  • 举报
回复
还有就是比较的问题,如果是绑定的泛型集合的话就好了,直接有Exists方法
如果是DataSet的话就得循环比较了,如果是VS2008可以参考下面MSN的文档
用Linq to DataSet操作,这样方便很多
http://msdn.microsoft.com/zh-cn/library/bb386998.aspx
Freeedom 2008-12-20
  • 打赏
  • 举报
回复
谢谢6楼的分析!
应该是你说的第一种情况。

1、如你的A列是a,这时我修改成b,然后又改成a,这样算修改吗?
修改应该是与数据库值不同吧?
这样的话你可以将绑定dataGridView的数据源保存下来
在提交的时候根据提交数据源与之前保存下来的数据源比较,如果值不一样,就赋与修改人和DateTime.Now

===
wangping_li 2008-12-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Freeedom 的回复:]
C# code例如:
有DataGridView1,
A,B,C,修改人,修改時間
----------------------------------
a,b,c,xxxxxx, 2008-12-20 10:58:45
d,e,f,yyyyyy, 2008-12-20 11:06:42

如果前3列即A、B、C的數據有任何改變,則后兩列數據即修改人等於某個值(即當前用戶ID),修改時間等於系統當前時間。
前提是后兩列是ReadOnly,不允許讓用戶更改。

請問這一需求該如何處理才好?有簡單例子最好,沒有的話給個思路也行。
就是有誰…
[/Quote]
1、如你的A列是a,这时我修改成b,然后又改成a,这样算修改吗?
修改应该是与数据库值不同吧?
这样的话你可以将绑定dataGridView的数据源保存下来
在提交的时候根据提交数据源与之前保存下来的数据源比较,如果值不一样,就赋与修改人和DateTime.Now

===

2、如果你非要实行即时的东西,即我a改b,后面就要即时反应出来,再由b改a也要反应出来.这样就用下面方法:
在dataGridView的EditingControlShowing事件里面写

private void dataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
TextBox t=e.Control as TextBox;
if (t != null)
{
t.TextChanged += new EventHandler(t_TextChanged);
t.TextChanged -= new EventHandler(t_TextChanged);//操作完以卸载事件
}
}

void t_TextChanged(object sender, EventArgs e)
{
//这里执行你想要的操作
}

flyjimi 2008-12-20
  • 打赏
  • 举报
回复
在datagrivew的CellEndEdit事件处理函数中写。

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
DataGridViewRow dr = dataGridView1.Rows[e.RowIndex];
dr.Cells[3].Value = "当前用户";
dr.Cells[4].Value = DateTime.Now;
}

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧