2009-11-02 2 views
2

내 DataGridView는 단일 행 선택이며 선택한 행이 바뀔 때마다 줄 인덱스를 얻는 rowEnter 이벤트입니다. 내가 삭제 버튼을 누르면해당 인덱스가 지정된 DataGridView에서 행 삭제

private void rowEnter(object sender, DataGridViewCellEventArgs e) 
    { 
     currentRowIndex = e.RowIndex; 
    } 

나는 그렇지 않으면 오류가 발생하는, 행

  myDataSet.Avaliado.Rows[currentRowIndex].Delete(); 
      avaliadoTableAdapter.Update(myDataSet.Avaliado); 

된 DataGridView에는 열이 정렬되어 있지 않은 경우 잘 작동에게 삭제 같은 인덱스를 사용합니다. DataGridView에서 rowindex에 해당하는 데이터 집합의 행 인덱스를 확인하는 방법은 무엇입니까?

답변

2

:

+0

대단히 감사합니다. 그냥 코멘트. 서두르다 보면 실수를 한 것입니다. 진지한 건 없어요. :) DataRowView 행 = (DataRowView) dgvRow.DataBoundItem; 이상한 점은 DGV의 마지막 행을 삭제할 때 DVG가 이전에 사용 가능한 행을 선택하지 않는다는 것입니다. –

+0

죄송합니다. 당신 말이 맞아요. 샘플 코드에서 BindingList 이 DataGridView에 바인딩되어 있으므로 샘플 코드에서 중개 DataRowView가 없었습니다. 예제를 업데이트하겠습니다 ... – Yoopergeek

0

저는 대개 해당 행의 기본 키를 숨겨진 열로 사용합니다 (본인의 관례는 처음 사용하는 열을 사용하고 있습니다).

그런 다음 나머지는 내 지속성 계층에 요청할 수 있습니다. 당신은 현재의 행 인덱스에 새로운 행이 선택 될 때마다 잡아 할 필요가 없습니다

if(myDataGridView.SelectedRows.Count > 0) 
    currentRowIndex = myDataGridView.SelectedRows[0].Index; 
0

당신은 당신이 삭제를하고있는 시점에서 현재 선택한 행을 찾을 수 있습니다. 대신이 같은 것을보십시오 :

if (_Grid.SelectedRows.Count <= 0) { return; } // nothing selected 

DataGridViewRow dgvRow = _Grid.SelectedRows[0]; 

// assuming you have a DataTable bound to the DataGridView: 
DataRowView row = (DataRowView)dgvRow.DataBoundItem; 
// now go about deleting the row however you would do that. 

당신은 그리드의 각 행에 바인딩 된 데이터 형식의 다른 종류를 가지고있는 경우는, 단순히 데이터 유형이 무엇이든에 DataGridViewRow.DataBoundItem를 캐스팅.

+0

rowEnter 이벤트에서 이미 가지고있는 값과 같지 않습니까? DataGridView의 행에는 인덱스가 있으며 데이터 집합의 데이터 행에는 DataGridView와 반드시 일치하지 않는 다른 위치가 있습니다. 그게 전부 야. –

+0

죄송합니다. 난 당신이 칼럼이 정렬되면 적절한 색인을 잃고 있다는 것을 의미한다고 생각했습니다. myDataGridView.SelectedRows [0] .DataBoundItem 실제로 당신이 그때 관심이 무엇입니까. – msergeant