我有一个datagridview通过datagridview的数据源属性绑定到数据表。使用以下代码行逐行添加行并始终在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继续向下滚动。
答案 0 :(得分:2)
每次添加新行时,只需滚动到DataGridView的顶部。 你可以通过设置属性FirstDisplayedScrollingRowIndex来实现 到索引为0的第一行:
dataGridView.FirstDisplayedScrollingRowIndex = 0;
答案 1 :(得分:0)
FirstDisplayedScrollingRowIndex
将会有效。
例如:
<强> 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;
}
}
<强>结果强>