.net 2005下面关于DataGridView的使用

程英杭 2006-05-21 04:17:12
在.net 2005下面出了个DataGridView的控件,我想请问大家这个控件如何实现下面几个功能:
1。如何在我们单元格编辑结束后安回车时候,横向移动单元格。现在默认的时候是纵向移动单元格的。我现在能够实现的是在显示的时候,通过设置DataGridView.CurrentCell来实现横向移动,但如果处于编辑状态他就默认下移,这个怎么办?
2。假设我DataGridView邦定了一个DataSet,那么我希望单元格在某一行最后一列的时候,自动增加一行,我现在程序实现采用如下代码:DataRow drNew = DataSet.Table.NewRow() ; DataSet.Table.Rows.Add(drNew).这样确实可以增加行,但是却增加了两行。如果不在DataGridViewCell中实现该代码,比方通过按钮的Click事件,那么增加的是一行。这个该怎么解决。
3。如果能够触发某一个单元格的KeyPress事件,我希望我在单元格输入的时候自动触发KeyPress事件,这个该怎么处理。
今天下午学习了下DataGridView结果发现了很多问题,这三个问题是比较棘手的问题,希望大虾们能给我解答,小弟这里谢谢了。
...全文
286 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
feiyun0112 2006-05-22
  • 打赏
  • 举报
回复
override Form 的ProcessCmdKey方法

在里面判断activecontrol或者它的parent是不是datagridview
MonkWang 2006-05-22
  • 打赏
  • 举报
回复
学习 收藏
marvelstack 2006-05-22
  • 打赏
  • 举报
回复
http://www.microsoft.com/china/msdn/library/langtool/vsdotnet/vs05a9.mspx
程英杭 2006-05-22
  • 打赏
  • 举报
回复
谢谢了 我下次测试下 要是还有问题再来麻烦大家
我现在在外面出差 没时间测试呢
lowtemper 2006-05-22
  • 打赏
  • 举报
回复
你自行调用currentcell的endedit()方法试下,应该可以达到效果
wawowawoo 2006-05-21
  • 打赏
  • 举报
回复
帮顶
程英杭 2006-05-21
  • 打赏
  • 举报
回复
前面两个问题都解决了 谢谢
但是第三个问题好像还是不可以
我需要我们在DataGridCell里面写一个字就把这个字显示出来
我原先在DataGrid里面的时候由于我们新输入的字 在没有回车以前都处于缓存里面 所以我那时候采用把这个单元格移开再移回去,把缓存里面的内容邦定到DataGridCell里面。但这里不知道怎么实现好点,望指教
程英杭 2006-05-21
  • 打赏
  • 举报
回复
谢谢 我测试下
san12655874 2006-05-21
  • 打赏
  • 举报
回复
帮你UP
但是,按回车的时候是横向的,为什么不用TAB
lowtemper 2006-05-21
  • 打赏
  • 举报
回复
第三个问题,写在CellBeginEdit事件中
lowtemper 2006-05-21
  • 打赏
  • 举报
回复
第二个问题,写在RowLeave事件中
lowtemper 2006-05-21
  • 打赏
  • 举报
回复
第一个问题:
private bool bEnterEdit = false;
private void InfoDataGridView_CellEnter(object sender, DataGridViewCellEventArgs e)
{
if (this.EnterEnable)
{
bEnterEdit = true;
}
}
private bool fEnterEnable;
[Description("enable key of enter to move to the next cell")]
public bool EnterEnable
{
get
{
return fEnterEnable;
}
set
{
fEnterEnable = value;
}
}
protected override bool ProcessDialogKey(Keys keyData)
{
if (this.EnterEnable)
{
Keys key = (keyData & Keys.KeyCode);
if (key == Keys.Enter)
{
if (this.bEnterEdit && !this.CurrentCell.IsInEditMode && !this.CurrentCell.ReadOnly)
{
bEnterEdit = false;
return this.BeginEdit(true);
}
return this.ProcessRightKey(keyData);
}
}
return base.ProcessDialogKey(keyData);
}

public new bool ProcessRightKey(Keys keyData)
{
try
{
Keys key = (keyData & Keys.KeyCode);
if (key == Keys.Enter)
{
if ((base.CurrentCell.ColumnIndex == (base.ColumnCount - 1)) && (base.CurrentCell.RowIndex == (base.RowCount - 2)))
{
base.CurrentCell = base.Rows[base.RowCount - 1].Cells[0];
return true;
}
if ((base.CurrentCell.ColumnIndex == (base.ColumnCount - 1)) && (base.CurrentCell.RowIndex + 1 != base.NewRowIndex))
{
base.CurrentCell = base.Rows[base.CurrentCell.RowIndex + 1].Cells[0];
return true;
}
}
return base.ProcessRightKey(keyData);
}
catch
{
return true;
}
}

protected override bool ProcessDataGridViewKey(KeyEventArgs e)
{
if (this.EnterEnable)
{
if (e.KeyCode == Keys.Enter)
{
if (this.bEnterEdit && !this.CurrentCell.IsInEditMode && !this.CurrentCell.ReadOnly)
{
bEnterEdit = false;
return this.BeginEdit(true);
}
return this.ProcessRightKey(e.KeyData);
}
}
return base.ProcessDataGridViewKey(e);
}
fuyiyong 2006-05-21
  • 打赏
  • 举报
回复
帮你顶一下吧!!

110,539

社区成员

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

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

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