2009-09-29 4 views
0

행을 찾고 해당 행을 데이터 테이블에서 삭제하려고합니다. 계속해서 nIndex = -1이됩니다. 누구나 제안 사항이 있습니까? 새 DataRow를DataTable Rows.IndexOf()

dr = dt.NewRow(); 

을 만들 수 있기 때문에

protected void cbxSelected_CheckedChanged(object sender, EventArgs e) 
{ 
CheckBox checkbox = (CheckBox)sender; 
GridViewRow row = (GridViewRow)checkbox.NamingContainer; 
string sSampleId = row.Cells[1].Text; 

if (!string.IsNullOrEmpty(sSampleId)) 
{ 
    DataTable dt; 

    if (ViewState["dtTemp"] != null) 
    { 
    dt = (DataTable)ViewState["dtTemp"]; 
    } 
    else 
    { 
    dt = new DataTable(); 
    dt.Columns.Add("sample_id"); 
    } 

    DataRow dr; 
    string[] drow = new string[] { sSampleId }; 
    dr = dt.NewRow(); 
    dr.ItemArray = drow; 

    if (checkbox.Checked == true) 
    { 
    dt.Rows.Add(dr); 
    } 
    else if (checkbox.Checked == false) 
    { 
    int nIndex = dt.Rows.IndexOf(dr); 
    dt.Rows.RemoveAt(nIndex); 
    } 

    ViewState.Add("dtTemp", dt); 
} 
} 

답변

0

당신은 DataTable의에서 찾을 수 없습니다.

당신은 DataTable에에있는 행을 제거하려면 :

int nIndex = dt.Rows.IndexOf(row); 

하지

int nIndex = dt.Rows.IndexOf(dr); 

편집 : 아니면 없습니다. 찾아 그 ID 주어진 ADO.NET DataTable에서 행을 삭제하려면

for (var i = dt.Rows.Count; i >= 0; i--) 
    if (dt.Rows[i].Cells[1].Text == sSampleId) { 
    dt.Rows.Remove(i); 
    break; 
    } 
} 
+0

나는 데이터 테이블에서 그 행을 찾을 수있을 것이라고 생각했다. VB에서이 일을 기억하지만, C#은 좀 더 인색 한 것처럼 보입니다. 나는 테이블을 반복하면서 찾은 행을 지우라고 제안했다. 의견을 보내 주셔서 감사합니다. – Kris

0

:

DataRow[] found = dt.Select("sample_id = " + sample_id); 
if (found.Length < 0) 
{ 
    found[0].Delete(); 
} 

주 당신은 아마 전체 DataTable을 통해 루프가 있고 열에 값을 비교한다 DeleteRemove 사이에 차이가 있다는 것을 Delete은 행의 상태를 RowState.Deleted으로 변경하기 때문에 대부분의 경우 DataTable에서 사라집니다. 그러나 그것은 여전히 ​​존재합니다. 데이터 어댑터를 사용하여 DataTable을 기본 데이터베이스 테이블과 동기화하는 경우 중요합니다. 어댑터는 Update 메서드를 호출하고 Rows 컬렉션에서 행을 제거 할 때 기본 행을 삭제합니다.

데이터 어댑터를 사용하지 않는 경우 행을 제거하려면 Remove을 사용해도됩니다.