请教Datagridview选择下一行问题 我用一个Datagridview做了一个数据表,现在我添加了一个Button控件,我想要在当我点击Button按钮后,Datagridview里所选中的行会跳到下一行,而且当所选行为数据表最后一行时点击Button会跳回表的第一行,请问``的功能我该怎么做,要在哪些事件里写怎样的代码``请各位大大帮帮小弟```万分感谢``` 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼主知道 CurrencyManager 概念不?不知道的话查查文档, 你拿到 CurrencyManager 后就很简单了. int IrowNO; private void move() { if (ds.Tables.Contains("Table1") && ds.Tables["Table1"].Rows.Count > 0) { textBox1.Text = ds.Tables["Table1"].Rows[0]["学号"].ToString(); textBox2.Text = ds.Tables["Table1"].Rows[0]["姓名"].ToString(); dataGridView1.MultiSelect = false; dataGridView1.CurrentCell = dataGridView1.Rows[IrowNo].Cells[0]; dataGridView1.Rows[IrowNo].Selected = true; } private void button2_Click(object sender, EventArgs e) { if (IrowNo > 0) IrowNo = IrowNo - 1; move(); } private void button1_Click(object sender, EventArgs e) { IrowNo = 0; move(); }可以回到第一行 循环datagridview行通过 RowIndex加减移动DetailDataGrid.Rows[e.RowIndex].Selected = true; 这个应该不难吧,e.RowIndex得到行数。最后一行判断一下就OK了 我也遇见过这个问题,有个关键地方是要刷新一下:dataGridView1.Rows[selectIndex].Selected = true; dataGridView1.Refresh(); 参考代码 /* DGV 的数据绑定 */ this.dataGridView1.DataSource = dataSet; this.dataGridView1.DataMember = "Numbers"; // 这个 cm 可以声明为类的成员变量 CurrencyManager cm; /* 拿到 CurrencyManager, 注意这里的dataSet, "Numbers" 跟 DGV 绑定是一致的 */ cm = (this.BindingContext[dataSet, "Numbers"] as CurrencyManager); // 按钮中直接对 cm 操作即可 private void button1_Click(object sender, EventArgs e) { if (cm.Position == (cm.Count -1)) cm.Position = 0; else cm.Position++; }这样更加直观一些, 界面上呈现的行聚焦的变化, 其实在底下是一个位置(指针)的变化,就是那个 CurrencyManager, 数据绑定方面还是有好多东西需要学习的,对 UI 元素进行操控也未尝不可, 只是显得有点皮毛.要使用这个, 还要理解 BindingContext 的概念. 要达到那个效果的方法很多,我这里告诉你一个很有趣的方法吧。问题的难点不就在让程序动态获得当前Datagridview最后一行的索引并在当选到最后一行的时候让索引自动回到第一行嘛,我这里不考虑您的Datagridview当前又多少行数据,就是利用index越界的异常来达到您想要的效果!代码如下: //首先定义一个全局变量,用于保存当前Datagridview中所选行的索引 int i; //在您的窗体加载事件中给i赋值 private void Form1_Load(object sender, EventArgs e) { i = this.Datagridview.CurrentRow.Index;//把当前所选行的索引值赋给i } //Butten单击事件 private void btnNextRow_Click(object sender, EventArgs e) { //用于捕获索引越界的异常 try { this.dgvInfo.Rows[i].Selected = false;//取消当前行的选择状态 this.dgvInfo.Rows[i + 1].Selected = true;//选中当前行的下一行 i++;//让全局变量i的值加1,便成了您此次操作所选中的行的索引 } //当到达最后一行时一定会报异常,我们就利用这个异常把i的值还原为0,并且选中第一行 catch(Exception) { this.dgvInfo.Rows[0].Selected = true; i = 0; } //这里我只让它报异常,而不要获取异常的任何信息,自己处理这个异常,以后便会一直循环选择下一行,而且不会报错!试试吧 } 谢谢各位大大的指点````我现在用 Fighting_Lin 大大的办法解决跳到下一行的问题```可是```这样又出现了一个问题了``就是当我自己手动选取一行后```再点击"下一行"按钮时,我自己手动选取的那一行还是处于选择状态,同时多出了一行选取行,也就是Datagridview控件里的焦点还处于我手动选取的那一行,这是为什么```能不能在点击下一行选取下一行之后把焦点移到"下一行"按钮所选取的那一行???? int i;i = dataGridView1.CurrentRow.Index;dataGridView1.Rows[i].Selected = false;if(i < dataGridView1.Rows.Count - 1){ dataGridView1.CurrentCell = dataGridView1.Rows[i + 1].Cells[0]; i += 1;}else{ dataGridView1.CurrentCell = dataGridView1.Rows[0].Cells[0]; i = 0;}dataGridView1.Rows[i].Selected = true; 数据库存放的值是1,asp.net读取到DataTable变成了True 新手提问 如何用PICTUREBOX显示多页TIF文件? xml.loadxml()后如何读取??? HyperLink在GridView中如何应用 俺是菜鸟..一个简单问题,,50分来抢吧. 有哪位大侠知道做快捷键吗 在winform设计中 象qq那样 按enter+ctrl 就相当于 send 发送消息 ? 在电脑上安装上电视卡,可否写程序自动录制某段时间的电视节目和自动转台? 快捷方式的问题? 正则表达式:如何匹配用逗号分隔的4个浮点数? CE下调用GDI+双缓冲问题 C#中如何利用正则表达式搜索这个字符串?
private void move()
{
if (ds.Tables.Contains("Table1") && ds.Tables["Table1"].Rows.Count > 0)
{
textBox1.Text = ds.Tables["Table1"].Rows[0]["学号"].ToString();
textBox2.Text = ds.Tables["Table1"].Rows[0]["姓名"].ToString();
dataGridView1.MultiSelect = false;
dataGridView1.CurrentCell = dataGridView1.Rows[IrowNo].Cells[0];
dataGridView1.Rows[IrowNo].Selected = true;
}
private void button2_Click(object sender, EventArgs e)
{
if (IrowNo > 0)
IrowNo = IrowNo - 1;
move();
}
{
IrowNo = 0;
move();
}
可以回到第一行
DetailDataGrid.Rows[e.RowIndex].Selected = true;
最后一行判断一下就OK了
dataGridView1.Refresh();
参考代码 /* DGV 的数据绑定 */
this.dataGridView1.DataSource = dataSet;
this.dataGridView1.DataMember = "Numbers"; // 这个 cm 可以声明为类的成员变量
CurrencyManager cm; /* 拿到 CurrencyManager, 注意这里的dataSet, "Numbers" 跟 DGV 绑定是一致的 */
cm = (this.BindingContext[dataSet, "Numbers"] as CurrencyManager); // 按钮中直接对 cm 操作即可
private void button1_Click(object sender, EventArgs e)
{
if (cm.Position == (cm.Count -1))
cm.Position = 0;
else
cm.Position++;
}
这样更加直观一些, 界面上呈现的行聚焦的变化, 其实在底下是一个位置(指针)的变化,
就是那个 CurrencyManager, 数据绑定方面还是有好多东西需要学习的,
对 UI 元素进行操控也未尝不可, 只是显得有点皮毛.要使用这个, 还要理解 BindingContext 的概念.
要达到那个效果的方法很多,我这里告诉你一个很有趣的方法吧。
问题的难点不就在让程序动态获得当前Datagridview最后一行的索引并在当选到最后一行的时候让索引自动回到第一行嘛,我这里不考虑您的Datagridview当前又多少行数据,就是利用index越界的异常来达到您想要的效果!
代码如下: //首先定义一个全局变量,用于保存当前Datagridview中所选行的索引
int i;
//在您的窗体加载事件中给i赋值
private void Form1_Load(object sender, EventArgs e)
{
i = this.Datagridview.CurrentRow.Index;//把当前所选行的索引值赋给i
}
//Butten单击事件
private void btnNextRow_Click(object sender, EventArgs e)
{
//用于捕获索引越界的异常
try
{
this.dgvInfo.Rows[i].Selected = false;//取消当前行的选择状态
this.dgvInfo.Rows[i + 1].Selected = true;//选中当前行的下一行
i++;//让全局变量i的值加1,便成了您此次操作所选中的行的索引
}
//当到达最后一行时一定会报异常,我们就利用这个异常把i的值还原为0,并且选中第一行
catch(Exception)
{
this.dgvInfo.Rows[0].Selected = true;
i = 0;
}
//这里我只让它报异常,而不要获取异常的任何信息,自己处理这个异常,以后便会一直循环选择下一行,而且不会报错!试试吧
}
i = dataGridView1.CurrentRow.Index;dataGridView1.Rows[i].Selected = false;if(i < dataGridView1.Rows.Count - 1)
{
dataGridView1.CurrentCell = dataGridView1.Rows[i + 1].Cells[0];
i += 1;
}
else
{
dataGridView1.CurrentCell = dataGridView1.Rows[0].Cells[0];
i = 0;
}
dataGridView1.Rows[i].Selected = true;