2016-08-29 2 views
0

DataGridView에서 DeleteItem 기능을 구현하려고합니다. 내가 너무 내 삭제 방법에 전달할 수 선택된 행 ID 열을 얻으려고DataGridView 행 인덱스는 항상 동일한 값을 반환합니다.

private void btnDeleteDjelatnik_Click(object sender, EventArgs e) 
{ 
    int idDjelatnik = -1; 
    int index = djelatnikDataGrid.CurrentRow.Index; 
    Int32.TryParse(djelatnikDataGrid.Rows[index].Cells[0].Value.ToString(), out idDjelatnik); 
    r.DeleteDjelatnik(idDjelatnik); 
} 

: 나는 다음과 같은 이벤트가 DeleteDjelatnik (INT slectedID)를;

int index = djelatnikDataGrid.CurrentRow.Index; 

나는 또한

int index = djelatnikDataGrid.SelectedRows[0].Index; 

을 시도하지만 ArgumentOutOfRange 예외를 받고 있어요, 그래 내의 selectionMode가 FullRowSelect

어떻게 :

다음 줄은 항상 나에게 3의 가치를 제공 이것을 작동 시키려면?

public int djelatnikSelectedRowIndex { get; set; } 

private void djelatnikDataGrid_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    djelatnikSelectedRowIndex = e.RowIndex; 
} 
+0

try datagridview.CurrentCell.RowIndex –

+0

'CurrentRow'와'SelectedRow'는 같지 않을 수도 있습니다. 'CurrentRow'는 셀이 활성화 된 행을 반환합니다. 'SelectedRows'는 선택을 반환하므로'djelatnikDataGrid.SelectedRows [0]'을 사용해야합니다. –

+0

나는 이미 datagridview.CurrentCell.RowIndex를 시도해 왔으며 어떤 행을 선택하든 여전히 값 3을 얻습니다./ – ChenChi

답변

0

진짜 문제 : DataGridView를 Index 속성이 올바른 값을 반환하지 않기 때문에

0

나는이 코드 조각을 썼다 내 BindingNavigator의 DeleteItem 속성입니다!

"None"으로 설정하기 전에 "btnDeleteDjelatnik_Click"을 실행하기 전에 DataGridView에서 행을 삭제하고 삭제하려는 행의 실제 ID를 가져올 수 없도록 색인 생성을 망칠 것입니다!

내 방법은 이제 다음과 같습니다 도움말 모두

private void btnDeleteDjelatnik_Click(object sender, EventArgs e) 
     { 
      int index = djelatnikDataGrid.SelectedRows[0].Index; 
      int idDjelatnik = -1; 
      Int32.TryParse(djelatnikDataGrid["IDDjelatnik", index].Value.ToString(), out idDjelatnik); 
      r.DeleteDjelatnik(idDjelatnik); 
      djelatnikDataGrid.Rows.RemoveAt(index); 
     } 

감사합니다!

+0

음 ..'SelectedRows [i] .Index'는 절대로 실패하지 않았습니다. 절대로 ...:) – Pikoh

+0

그게 내가 xD를 권 해하지 않으면, 정말 이상한 일이 벌어지고있는 것 같아. – ChenChi

+0

내가 왜 이런 일이 일어나고 있는지 알게되면 – ChenChi

1

사용 된 DataGridView의 UserDeletingRow 이벤트,

private void dataGridView1_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e) 
     { 
      int deletingRowIndex = e.Row.Index; 
     } 

희망이 도움이

+0

오, 내가 방금 왜 내가 오류가 발생했는지 알았다고 생각한다. DataGridView에서 삭제하려고하는 항목은 사전에 삭제되고 (BindingNavigator를 사용한 이후) RowIndex가 다음으로 변경된다. -1, 다음 데이터베이스에서 삭제하려면 내 메서드를 호출 할 때 잘못된 항목 (인덱스 -1있는 하나) 삭제 ... – ChenChi

+0

항목을 실제로 삭제되기 전에 인덱스를 얻으려면이 메서드를 확실히 사용합니다, 내 전체 혼란이 시작 xD – ChenChi

+0

@ChenChi 도움을 청할 :) – Berkay

관련 문제