2017-07-16 68 views
0

我有一个datagridview通过datagridview的数据源属性绑定到数据表。行是通过一个始终在用下面的代码行的DataGridView的顶部增加了一个,例如:C#Winforms:插入项目到datagridview的顶部向下滚动

DataRow newRow = myDataTable.NewRow(); 
newRow[0] = "column1 value"; 
newRow[1] = "column2 value"; 
myDataTable.Rows.InsertAt(newRow, 0); 

的问题是,datagridview的垂直滚动向下移动,使不可见DataGridView的顶部添加的最后一行所以我不希望垂直滚动向下移动,以便在顶部插入可见的最后一行。

我该怎么做?

ATTEMPT 1

DataGridViewRow selectedRow = null; 
if (dataGridView1.SelectedRows.Count > 0) 
    selectedRow = dataGridView1.SelectedRows[0]; 

DataRow newRow = myDataTable.NewRow(); 
newRow[0] = "column1 value"; 
newRow[1] = "column2 value"; 
myDataTable.Rows.InsertAt(newRow, 0); 

if (selectedRow != null) 
    dataGridView1.FirstDisplayedScrollingRowIndex = selectedRow.Index; 
else 
    dataGridView1.FirstDisplayedScrollingRowIndex = 0; 

here萃取。

似乎不工作。 dataGridView1.FirstDisplayedScrollingRowIndex始终为0,但datagridview继续向下滚动。

回答

2

您每次添加新行时只需滚动到DataGridView的顶部。 您可以通过属性FirstDisplayedScrollingRowIndex 设置到具有索引0的第一个行这样做的:

dataGridView.FirstDisplayedScrollingRowIndex = 0; 
+0

它似乎不工作。看到我的更新。 – user1624552

+0

选定的行如何?有没有? –

+0

不,永远不会。没有选择行。 dataGridView1.SelectedRows.Count始终为0。 – user1624552

0

FirstDisplayedScrollingRowIndex如果你的DataGridView直接工作会工作。

例如:

Form1.cs的

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

     dataGridView1.Columns.Add("firstColumn", "Name"); 
     dataGridView1.Columns.Add("secondColumn", "Mark"); 
     dataGridView1.Rows.Add(99); 

     for (int i = 99; i >= 0; i--) 
     { 
      dataGridView1[0, i].Value = "column1 value " + (100 - i); 
      dataGridView1[1, i].Value = "column2 value " + (100 - i); 
     } 

     dataGridView1.FirstDisplayedScrollingRowIndex = 0; 
    } 
} 

结果

enter image description here