DataView过滤后用dataGridView显示,在不同列排序的情况下如何获得当前dataGridView显示下选中行的下一行内容?
   
      
  DataView dv1= new DataView(dt1);//dt1为DataTable
  dv1.RowFilter = "Name = 0";
  dataGridView1.DataSource = dv1;    我的操作:在dataGridView1当前行按下空格键,更改当前行某一列的值,如:“状态”列的值(dataGridView1.CurrentRow["状态"]),当keyup后选中的行跳到下一行。
    问题来了:
         情况一:如果当前的排序列不是“状态”列,那好办,KeyUp后当前dataGridView1中的顺序不会改变,主要Send(Enter或Down)就会跳到下一行;
         情况二:排序的就是“状态”列,当KeyUp后dataGridView1的顺序可能被打乱,会自动重新排序,在KeyDown的时候如何取得KeyUp前当前行的下一行的内容,用来Up后定位??????    过滤后的dv1有没有一个行的编号?让我通过这个编号来得到下一行的内容

解决方案 »

  1.   

    晕的很
    这个定位可以通过dataGridView1.CurrentRow.Index + 1直接找到索引来找到下一行的值我找到了这个Cell的值,Up之后如何是这个单元格的行成为选中行,也设置为CurrentCell??
    因为KeyUP后顺序会乱,不能通过Index+1来设定, 在新顺序下只能通过遍历寻找这个Cell值来获得Index么?
    this.dataGridView1.Rows[index].Selected = true;
    this.dataGridView1.CurrentCell = dataGridView1[index,0];能不能通过这个Cell的值(唯一的)来设定dataGridView1的选中行和CurrentCell ?????
      

  2.   

    我看了也有点晕,你就是把你控件上显示的数据进行排序是么 ?
       那你得首先要找到你操作的当前行的ID.排序你可以交换2笔数据的顺序就是了。给表中加个字段为序号。根据当前行的ID 就可以知道它的序号。那么将它排序的话 交换序号的顺序就OK了.
      

  3.   

    由于修改后会自动排序,所以不要保存Index,而应该保存DataGridViewRow对象:DataGridViewRow nextRow=dataGridView1.Rows[dataGridView1.CurrentRow.Index + 1]
      

  4.   

    1:this.dataGridView1.CurrentRow.Cells["状态"].Value = "OK";
    2:this.dataGridView1.CurrentRow.DefaultCellStyle.ForeColor = Color.Red;3:NextRowFileName = dataGridView1.Rows[dataGridView1.CurrentRow.Index + 1].Cells["FILE_NAME"].Value.ToString();
    4:this.dataGridView1.CurrentCell = dataGridView1[0, FindRow("FILE_NAME", NextRowFileName )];(FindRow是在dataGridView1中遍历寻找NextRowFileName 所在的行号)3、4这两句就可以使dataGridView1的选中行往下一行跳,我在改值的同时在改变行的颜色,1、2句,若["状态"]这列被排序了,那么在dataGridView1自动刷新后顺序改变,但是行的颜色依旧,原来1-3行为红色,刷新后还是1-3行红色,要遍历一次dataGridView1重新设置颜色貌似反应比较慢,因为行数据量大,不知道如何让颜色随行变动?????
                        
      

  5.   

    要设置下一行为选中行,我还是要用nextRow的关键字来找刷新排序后的行号
      

  6.   

    //保存nextCell
    nextCell=dataGridView1.Rows[dataGridView1.CurrentRow.Index + 1].Cells["FILE_NAME"];//keyup时
    this.dataGridView1.CurrentCell=nextCell;