3

私は にDataGridViewバインドしていDataViewます。グリッドは、ユーザーが任意の列で並べ替えることができます。

DataViewの基になる でNewRow を呼び出してグリッドに行を追加しDataTable、それをDataTableの Rows コレクションに追加します。グリッドに新しく追加された行を選択するにはどうすればよいですか?

BindingManagerBaseの にバインドされたオブジェクトを作成してから、 を設定してみBindingContextましDataViewBindingManagerBase.Position = BindingManagerBase.Count。新しい行がグリッドの下部に追加されるため、これはグリッドがソートされていない場合に機能します。ただし、行が一番下に追加されないような並べ替え順序の場合、これは機能しません。

グリッドの選択した行を新しい行に確実に設定するにはどうすればよいですか?

4

3 に答える 3

3

バインドされた DataTable を更新するとすぐに、追加された行のインデックスを含む DataGridViewRowsAddedEventArgs.RowIndex プロパティを使用して、DataGridView コントロールによって「RowsAdded」イベントが発生します。

//local member
private int addedRowIndex;

private void AddMyRow()
{
    //add the DataRow           
    MyDataSet.MyDataTable.Rows.Add(...);

    //RowsAdded event is fired here....

    //select the row
    MyDataGrid.Rows[addedRowIndex].Selected = true;
}

private void MyDataGrid_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
    addedRowIndex = e.RowIndex;
}

おそらく最もエレガントなソリューションではありませんが、私にとってはうまくいきます

于 2009-01-26T01:43:01.503 に答える
1

Dont know id its the best solution but for instance looks better than iterate.

            DataRowView drv = (DataRowView)source.AddNew();
            grupoTableAdapter.Update(drv.Row);
            grupoBindingSource.Position = grupoBindingSource.Find("ID", drv.Row.ItemArray[0]);
于 2009-11-03T02:11:43.197 に答える
0

データソースにある種の一意の識別子があると仮定すると、行のコレクションを繰り返し処理して比較できます。

Dim myRecentItemID As Integer = 3

For Each row As GridViewRow In gvIndividuals.Rows
    Dim drv As DataRowView = DirectCast(row.DataItem, DataRowView)
    If CInt(drv("ItemID")) = myRecentItemID Then
        gvIndividuals.EditIndex = row.RowIndex
    End If
Next

お役に立てれば!

于 2008-10-16T19:05:52.160 に答える